我跑了下面的代碼,發現了一些奇怪的輸出。K&R和ANSI函數輸出之間的區別
int
mean_ansi (int num1, int num2)
{
printf ("In %s\n", __FUNCTION__);
printf ("num1,num2 is %d,%d\n", num1, num2);
return (num1 + num2)/2;
}
int
mean_K_and_R (num1, num2)
int num1, num2;
{
printf ("In %s\n", __FUNCTION__);
printf ("num1,num2 is %d,%d\n", num1, num2);
return (num1 + num2)/2;
}
int
main()
{
int i = 6;
double f = 1.0;
printf ("In %s\n", __FUNCTION__);
printf ("[f,i] = [%f,%d]\n", f, i);
/* deliberate mistakes */
mean_ansi (f, i);
mean_K_and_R (f, i);
return 0;
}
輸出:
在主
[F,I] = [1.000000,6]
在mean_ansi
NUM1,NUM2是1,6-
在mean_K_and_R
num1,num2是0,1072693248
任何人都可以解釋這種行爲。
我看到裝配,但不能發揮出太多。
在這兩種語法中,函數參數在堆棧上的推送方式有什麼不同嗎?
好問題(也是明確填補K&R聲明的最好理由) – 2011-12-04 13:06:17
您可以理智地接受這個問題的答案 - 以及您詢問和收到的很多其他問題的答案。當你想到它時,你可以將此評論標記爲「不再需要」。 – 2017-08-27 07:23:16