4 回答

TA貢獻1828條經驗 獲得超4個贊
#define WIDTH 80
#define LENGTH (WIDTH+40)
在第二個宏定義中,使用了前面定義過的宏名WIDTH。在編譯預處理時,程序中所有的WIDTH都被80所替換,所有的LENGTH又被(80+40)替換。如果程序中出現了如下語句:
var=LENGTH*20;
經過替換以后變為:
var=(80+40)*20;
但是如按以下方式定義:
#define WIDTH 80
#define LENGTH WIDTH+40
var=LENGTH*20;
則經過編譯預處理后變成
var=80+40*20;
就是說,宏替換只是簡單地用定義的宏體去替換宏名而不進行任何計算。因此,宏定義中若出現表達式時,園括號的有無,效果明顯不同。為了保證定義在置換后仍保持正確的運算順序,經常在定義中使用必要的圓括號將字符串括起來。

TA貢獻1859條經驗 獲得超6個贊
在C語言中宏是用來加載代碼的,是一個單獨的程序處理的。
比如,#define f(n) n==0? 1:f(n-1)+f(n-2)
當n=5時,就會被展開為
f(n-1)+f(n-2);
之后f(n)就找不到了,所以無法實現遞歸。

TA貢獻1842條經驗 獲得超21個贊
就是宏里邊可以嵌套宏例如:
#ifdef AA
……
#ifdef BB
……
#endif
……
#endif
遞歸?誰會拿宏來遞歸呢
也許不是這個意思也許是說這個吧:
#define a aa;
#define aa 1;
可嵌套是指這個意思吧;
不可遞歸就是不能定義回去吧,比如說:
#define a aa;
#define aa aaa;
#define aaa a;
- 4 回答
- 0 關注
- 614 瀏覽
添加回答
舉報