2 回答

TA貢獻(xiàn)1017條經(jīng)驗(yàn) 獲得超1032個(gè)贊
#define這是宏定義,它的作用是《1》讓某一個(gè)標(biāo)識(shí)符用一個(gè)字符串等價(jià)代替,或者《2》用來(lái)定義宏函數(shù)。
#define?PI?3,14159//作用:程序里出現(xiàn)PI就先用3.14159代換掉 eg:???printf("%f\n",4*PI);<---->printf("%f\n",4*3.14159);
eg:???#define?MAX(x)?x*x ???????printf("%d\n",MAX(3+4));//輸出19 ???????//等價(jià)于:printf("%d\n",3+4*3+4);注意是直接等價(jià)替換,不要先運(yùn)算得了個(gè)49

TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超0個(gè)贊
昨天剛學(xué),剛好認(rèn)真聽(tīng)了課··233
以#define開(kāi)始的行成為宏定義命令行。其定義形式是#define ?宏名 ?替代正文 (宏名和替代正文之間至少有一個(gè)空格)
此處注意,宏定義結(jié)束不用添加“;”,替代正文可以很長(zhǎng),可以是任何文本,中途可以換行,換行時(shí)注意,行尾“\”,然后下一行頂格寫(xiě),否則中途的空格會(huì)被認(rèn)為是替代正文。
eg:#define PI 3.14159
#define PI 3.14\
159
#define PI 3.14\
? ? 159
以上兩個(gè)換行例子是不一樣的。
宏替代是純粹簡(jiǎn)單的文本,沒(méi)有優(yōu)先級(jí)的存在。
eg:#define A 3+5
? ? ? ?printf(“%d”,A *2);
輸出來(lái)的結(jié)果是13,而非16。
宏定義還有另外一個(gè)帶參數(shù)的形式:
#define 宏名(參數(shù)列表) 替代正文
注意:此時(shí),宏名和(參數(shù)列表)中間是沒(méi)有空格的,參數(shù)列表里的參數(shù)是沒(méi)有類(lèi)型的。
宏替代不在是簡(jiǎn)單的文本替代,而是中途要轉(zhuǎn)個(gè)彎,即實(shí)參文本代替替代正文中對(duì)應(yīng)的參數(shù),但是還是沒(méi)有優(yōu)先級(jí)。
eg:#define MUL(X,Y) X*Y
?printf(“%d”,MUL(5,3));
printf(“%d”,MUL(5,3+2));
我的理解是純粹的文本代替,沒(méi)有優(yōu)先級(jí)即完全替代,不加括號(hào)。
#define宏定義是寫(xiě)在預(yù)處理部分的,即在int main的外圍;
#define 常常用來(lái)定義常數(shù)(如圓周率)
#define常替換函數(shù)(eg:#define max(a,b) (a)>(b)?(a):(b)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {int d=max(5+3,4);```````````}
我的筆記就做這么多/手動(dòng)圍笑/,希望能幫到你~~~~
- 2 回答
- 0 關(guān)注
- 1705 瀏覽
添加回答
舉報(bào)