预处理命令[#define]说明
宏定義
宏定義是對(duì)一些常見的變量、字符串等進(jìn)行定義,被定義的數(shù)據(jù)在編譯會(huì)進(jìn)行自動(dòng)替換。有時(shí)一些變量或字符串被多次使用,當(dāng)需要修改時(shí),就需要對(duì)源文件中它們出現(xiàn)的地方一一修改,效率比較低,而通過宏定義,只需要對(duì)定義進(jìn)行一次修改,就可以實(shí)現(xiàn)批量修改,提高效率,或者有時(shí)有些數(shù)字或字符需要多次輸入,而數(shù)字或字符又不是很規(guī)律時(shí),輸入就會(huì)比較繁瑣且容易出錯(cuò)。通過宏義將為輸入和維護(hù)帶來便利。
定義的格式
#define 標(biāo)識(shí)符?字符串
其中的“#”表示這是一條預(yù)處理命令。凡是以“#”開頭的均為預(yù)處理命令。“define”為宏定義命令。“標(biāo)識(shí)符”為所定義的宏名。“字符串”可以是常數(shù)、表達(dá)式、格式串等。
注意事項(xiàng)
1.宏定義只是一種簡(jiǎn)單的代換,預(yù)處理程序?qū)λ蛔魅魏螜z查。只能在編譯已被宏展開后的源程序時(shí)發(fā)現(xiàn)錯(cuò)誤。
2.宏定義不是說明或語句,在行末不必加分號(hào),如加上分號(hào)則連分號(hào)也一起置換。
3.宏定義其作用域?yàn)楹甓x命令起到源程序結(jié)束。如要終止其作用域可使用#undef命令。
使用實(shí)例
宏定義在處理有優(yōu)先級(jí)順序的表達(dá)式時(shí),應(yīng)加括號(hào),避免導(dǎo)致被宏展開后出現(xiàn)優(yōu)先級(jí)錯(cuò)誤。例如下面的代碼。
c語言允許宏帶有參數(shù)。在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實(shí)際參數(shù)。對(duì)帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實(shí)參去代換形參。參見下面的代碼。
#define C(x) (3.14*X*2) c=C(5) //等價(jià)于 c=(3.14*5*2)/// #define S(x,y) ((x)*(y))
s=S(2+3,4+4)
//等價(jià)于 s=((2+3)*(4+4))
///
不可以對(duì)調(diào)用時(shí)會(huì)產(chǎn)生變化的變量、操作數(shù)或表達(dá)式等進(jìn)行宏定義,如下代碼。
#define MIN(A,B) ((A)<(B)?(A):(B)) int a=1,b=5,min=0; min=MIN(a++,b);//宏展開后表達(dá)式為:max=((a++)< (b)?(a++):(b))
//返回值為min=3
///
條件編譯
在頭文件中通過使用#ifdef、#define和#endif的組合也可以進(jìn)行條件編譯。條件編譯的目的是用以實(shí)現(xiàn)防止多個(gè)文件對(duì)此同一個(gè)頭文件的重復(fù)引用。常見的格式如下。
#ifndef <</SPAN>標(biāo)識(shí)> #define <</SPAN>標(biāo)識(shí)> ……… // include or define sth. #endif
?
轉(zhuǎn)載于:https://www.cnblogs.com/Mikhail/p/4379635.html
總結(jié)
以上是生活随笔為你收集整理的预处理命令[#define]说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7_oracle11g_64位连接
- 下一篇: HDU5196--DZY Loves I