宏不是函數(shù)如果我們定義一個(gè)宏:
#defineMAX(a,b)a>b?a:b
當(dāng)我們執(zhí)行一個(gè)語(yǔ)句:
3+MAX(1,3);
我們期望的答案應(yīng)該是6才對(duì),其實(shí)呢,運(yùn)行之后的答案1。與宏定義相掛鉤的就是優(yōu)先級(jí),算數(shù)運(yùn)算符的優(yōu)先級(jí)高于條件運(yùn)算符,展開(kāi)如下:
3+1>3?1:3,首先進(jìn)行算符運(yùn)算符的運(yùn)算,即4>3?1:3,所以答案為1。請(qǐng)注意宏定義中的括號(hào),這些括號(hào)的作用就是預(yù)防引起優(yōu)先級(jí)相關(guān)的問(wèn)題。有些專(zhuān)家建議在
C語(yǔ)言中只要牢記兩個(gè)優(yōu)先級(jí)就夠了,乘除法優(yōu)先級(jí)高于加減法,在設(shè)計(jì)其它操作符時(shí),一律加上括號(hào)。
4、宏定義不是說(shuō)明或語(yǔ)句,在行末不必加分號(hào)
比如,加上分號(hào)則連分號(hào)也一起置換。
5、宏不是類(lèi)型定義
首先定義一個(gè)宏:
#definepCharchar*
再用pChar 定義兩個(gè)變量,之后用操作符sizeof讀取變量所占用內(nèi)存大小,如果是指針類(lèi)型的就占4個(gè)字節(jié),如果是字符型的就占1個(gè)字節(jié)。
結(jié)果占用空間不一樣,變量類(lèi)型自然不一樣,所以宏定義不是類(lèi)型定義。那么,如果我換成typedef來(lái)定義類(lèi)型呢?
宏定義只是簡(jiǎn)單的字符串代換,是在預(yù)處理完成的,而typedef是在編譯時(shí)處理的,它不是作簡(jiǎn)單的代換,而是對(duì)類(lèi)型說(shuō)明符重新命名。被命名的標(biāo)識(shí)符具有類(lèi)型定義說(shuō)明。
6、與之相關(guān)的宏定義
編寫(xiě)程序過(guò)程中,很多都需要條件編譯,來(lái)看一個(gè)常用的使用方法。
#if defined(CREDIT)
7、總結(jié)
宏的本質(zhì)是代碼替換。
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137505 -
宏定義
+關(guān)注
關(guān)注
0文章
51瀏覽量
9044
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論