2016-08-12 42 views
0

請解釋輸出 - 我得到的輸出爲20, ,但它應該是64,如果我沒有錯。宏的輸出如下代碼

#include<stdio.h> 
#define SQUARE(X) (X*X) 
main() 
{ 
    int a, b=6; 
    a = SQUARE(b+2); 
    printf("\n%d", a); 
} 
+0

你錯了 - 應該是20.運行'cc -E code.c'並查看SQUARE的擴展。 –

+0

順便說一句,你需要小心魔術引號'「\ n%d」'與普通引號'「%d \ n」' - C編譯器不會接受魔術引號。您通常應該使用換行符結束輸出行,而不是使用換行符開始行。你應該在'int'的'main()' - 上使用明確的返回類型(參見[C和C++中main [)應該返回什麼?](http://stackoverflow.com/questions/204476/)) 。 –

+0

非常感謝 –

回答

3

正確的結果是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