宏定義有無(wú)參數(shù)宏定義和帶參數(shù)宏定義兩種。
無(wú)參數(shù)的宏定義的一般形式為
# define 標(biāo)識(shí)符 字符序列
其中# define之后的標(biāo)識(shí)符稱(chēng)為宏定義名(簡(jiǎn)稱(chēng)宏名),要求宏名與字符序列之間用空格符分隔。這種宏定義要求編譯預(yù)處理程序?qū)⒃闯绦蛑须S后所有的定名的出現(xiàn)(注釋與字符串常量中的除外)均用字符序列替換之。前面經(jīng)常使用的定義符號(hào)常量是宏定義的最簡(jiǎn)單應(yīng)用。如有:
# define TRUE 1
# define FALSE 0
則在定義它們的源程序文件中,凡定義之后出現(xiàn)的單詞TRUE將用1替代之;出現(xiàn)單詞FALSE將用0替代之。
在宏定義的#之前可以有若干個(gè)空格、制表符,但不允許有其它字符。宏定義在源程序中單獨(dú)另起一行,換行符是宏定義的結(jié)束標(biāo)志。如果一個(gè)宏定義太長(zhǎng),一行不夠時(shí),可采用續(xù)行的方法。續(xù)行是在鍵人回車(chē)符之前先鍵入符號(hào)“\”。注意回車(chē)要緊接在符號(hào)“\”之后,中間不能插入其它符號(hào)。
宏定義的有效范圍稱(chēng)為宏定義名的轄域,轄域從宏定義的定義結(jié)束處開(kāi)始到其所在的源程序文件末尾。宏定義名的轄域不受分程序結(jié)構(gòu)的影響。可以用預(yù)處理命令#undef終止宏定義名的轄域。
在新的宏定義中,可以使用前面已定義的宏名。例如,
# define R 2.5
# define PI 3.1415926
# define Circle 2*PI*R
# define Area PI* R * R
程序中的Circle被展開(kāi)為2*3.1415926* 2.5,Area被展開(kāi)為3.1415926*2.5*2.5。
如有必要,宏名可被重復(fù)定義。被重復(fù)定義后,宏名原先的意義被新意義所代替。
通常,無(wú)參數(shù)的宏定義多用于定義常量。程序中統(tǒng)一用宏名表示常量值,便于程序前后統(tǒng)一,不易出錯(cuò),也便于修改,能提高程序的可讀性和可移植性。特別是給數(shù)組元素個(gè)數(shù)一個(gè)宏定義,并用宏名定義數(shù)組元素個(gè)數(shù)能部分彌補(bǔ)數(shù)組元素個(gè)數(shù)固定的不足。
注意:預(yù)處理程序在處理宏定義時(shí),只作字符序列的替換工作,不作任何語(yǔ)法的檢查。如果宏定義不當(dāng),錯(cuò)誤要到預(yù)處理之后的編譯階段才能發(fā)現(xiàn)。宏定義以換行結(jié)束,不需要分號(hào)等符號(hào)作分隔符。如有以下定定義:
# define PI 3.1415926;
相關(guān)推薦:計(jì)算機(jī)軟考程序員備考:程序設(shè)計(jì)知識(shí)點(diǎn)匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |