4 回答

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

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

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
就是宏里邊可以嵌套宏例如:
#ifdef AA
……
#ifdef BB
……
#endif
……
#endif
遞歸?誰會(huì)拿宏來遞歸呢
也許不是這個(gè)意思也許是說這個(gè)吧:
#define a aa;
#define aa 1;
可嵌套是指這個(gè)意思吧;
不可遞歸就是不能定義回去吧,比如說:
#define a aa;
#define aa aaa;
#define aaa a;

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
可以嵌套:#define a bb(不能是aa)
#define bb 123
預(yù)編譯時(shí)a會(huì)變?yōu)?23
不可遞歸:#define c 1+c
或#define c 1+b
#define b 1+c
預(yù)編譯時(shí)c會(huì)變成1+1+1+1+1+......無限循環(huán)
- 4 回答
- 0 關(guān)注
- 1330 瀏覽
添加回答
舉報(bào)