亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教關于宏定義嵌套問題

請教關于宏定義嵌套問題

ITMISS 2019-05-31 03:02:09
請教關于宏定義嵌套問題
查看完整描述

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;
就是說,宏替換只是簡單地用定義的宏體去替換宏名而不進行任何計算。因此,宏定義中若出現表達式時,園括號的有無,效果明顯不同。為了保證定義在置換后仍保持正確的運算順序,經常在定義中使用必要的圓括號將字符串括起來。



查看完整回答
反對 回復 2019-06-01
?
BIG陽

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)就找不到了,所以無法實現遞歸。

查看完整回答
反對 回復 2019-06-01
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

就是宏里邊可以嵌套宏例如:
#ifdef AA
……
#ifdef BB
……
#endif
……
#endif
遞歸?誰會拿宏來遞歸呢

也許不是這個意思也許是說這個吧:
#define a aa;
#define aa 1;
可嵌套是指這個意思吧;
不可遞歸就是不能定義回去吧,比如說:
#define a aa;
#define aa aaa;
#define aaa a;






查看完整回答
反對 回復 2019-06-01
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

可以嵌套:#define a bb(不能是aa)
#define bb 123
預編譯時a會變為123
不可遞歸:#define c 1+c
或#define c 1+b
#define b 1+c
預編譯時c會變成1+1+1+1+1+......無限循環



查看完整回答
反對 回復 2019-06-01
  • 4 回答
  • 0 關注
  • 614 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號