我用下面的C代碼,它給了輸出作爲通常爲:爲什麼兩個輸出都不一樣?
9,25
#include<stdio.h>
int PRODUCT(int x)
{
return (x*x);
}
void main()
{
int i = 3, j, k;
j = PRODUCT(i++);
k = PRODUCT(++i);
printf("%d, %d\n", j,k);
}
然而,當我用來代替功能宏定義如下:
#include<stdio.h>
#define PRODUCT(x) (x*x)
void main()
{
int i = 3, j, k;
j = PRODUCT(i++);
k = PRODUCT(++i);
printf("%d, %d\n", j,k);
}
輸出是
9,49
我試着查看使用cpp filename.c
編譯代碼和主要的擴張是這樣的:
void main()
{
int i = 3, j, k;
j = (i++*i++);
k = (++i*++i);
printf("%d, %d\n", j,k);
}
我不unserstand爲什麼增值業務正在做的兩倍,而使用宏。 我正在學習C,我無法弄清楚原因。預先感謝任何幫助!
其良好的自我學習,但其預定ü[R以下...? –
OP的問題不在於操作的順序。這是關於宏觀擴張。 – ArjunShankar
不要將宏看作函數調用 - 將其視爲通過複製/粘貼進行擴展。 –