这段代码给出了意想不到的输出。当我评论sumdig函数的printf时,a的返回值是6而b是12但是当printf保留时是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);
}
非void函数的每条路径都必须返回一个值。如果没有,我认为在C中,如果使用了返回值,那么UB只有UB,但谁在乎?无论如何,你的编译器是否至少警告过你? – Deduplicator 2014-10-06 16:22:53
你究竟在这里叫什么意外?添加/删除'printf'的效果?或者,如果没有'printf'两个看起来相同的调用返回不同的值? – AnT 2014-10-06 16:29:21