這段代碼給出了意想不到的輸出。當我評論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