【发布时间】:2014-10-06 16:17:03
【问题描述】:
这段代码给出了意外的输出。当我注释 sumdig 函数的 printf 时,a 的返回值为 6,b 为 12,但保留 printf 时,a 为 5,b 为 6。请解释一下。
main()
{
int a,b;
a = sumdig(123);
b = sumdig(123);
printf("\na=%d b=%d",a,b);
return 0;
}
int sumdig(int n)
{
static int s=0;
int d;
if(n!=0)
{
d=n%10;
n=(n-d)/10;
s=s+d;
sumdig(n);
}
else
return s;
printf("\n s=%d",s);
}
【问题讨论】:
-
非空函数的每个路径都必须返回一个值。如果没有,我认为在 C 中,如果使用返回值,则只有 UB,但谁在乎呢?无论如何,你的编译器至少没有警告过你吗?
-
在这里你到底怎么称呼意外?添加/删除
printf的效果?还是没有printf,两个看似相同的调用返回不同的值?
标签: c