【发布时间】:2014-08-19 06:56:11
【问题描述】:
几天前我遇到了一个问题。 问题来了..
int func(n){
if(n < 4)
return func(++n) + func(++n);
return n;
}
我通过调用func(0) 编译并运行程序,结果为 35。
但我无法可视化堆栈树。
谁能描述堆栈。
【问题讨论】:
-
我认为这是由于排序导致的未定义行为。
-
另外,为什么不在每次调用开始时使用
printf来显示n?也许还有返回值。这会对你有所帮助。 -
否 -
++n不会在这里调用未定义的行为。然而,未指定的行为是计算+操作数的顺序。因为它们是相同的,所以没关系。 -
@AlexanderGessler 不,是 UB。两个
++ns 是完全无序的。 -
为什么?编译器必须选择评估
func(++n)的顺序。一旦输入了一个func,它就充当一个序列点,因此n在计算另一个操作数之前肯定会递增。启发我这种想法有什么问题:-)