0
請解釋輸出 - 我得到的輸出爲20, ,但它應該是64,如果我沒有錯。宏的輸出如下代碼
#include<stdio.h>
#define SQUARE(X) (X*X)
main()
{
int a, b=6;
a = SQUARE(b+2);
printf("\n%d", a);
}
請解釋輸出 - 我得到的輸出爲20, ,但它應該是64,如果我沒有錯。宏的輸出如下代碼
#include<stdio.h>
#define SQUARE(X) (X*X)
main()
{
int a, b=6;
a = SQUARE(b+2);
printf("\n%d", a);
}
正確的結果是20
宏是簡單的文本替換。
要查看結果是20,只需將X
替換爲b+2
即可。然後,你必須:
b+2*b+2
爲b
是六是
6+2*6+2
這是20
使用宏時使用括號使宏看起來應該
# define SQUARE(X) ((X)*(X))
是非常重要的
然後結果將是64,因爲評估是
(b+2)*(b+2)
(6+2)*(6+2)
8*8
64
你錯了 - 應該是20.運行'cc -E code.c'並查看SQUARE的擴展。 –
順便說一句,你需要小心魔術引號'「\ n%d」'與普通引號'「%d \ n」' - C編譯器不會接受魔術引號。您通常應該使用換行符結束輸出行,而不是使用換行符開始行。你應該在'int'的'main()' - 上使用明確的返回類型(參見[C和C++中main [)應該返回什麼?](http://stackoverflow.com/questions/204476/)) 。 –
非常感謝 –