第 1 頁:9.1 宏定義 |
第 3 頁:9.2 文件包含 |
第 4 頁:9.3 條件編譯 |
第 6 頁:9.4 帶參數(shù)的主函數(shù) |
9.1 宏定義
宏定義有無參數(shù)宏定義和帶參數(shù)宏定義兩種。
無參數(shù)的宏定義的一般形式為
# define 標(biāo)識(shí)符 字符序列
其中# define之后的標(biāo)識(shí)符稱為宏定義名(簡(jiǎn)稱宏名),要求宏名與字符序列之間用空格符分隔。這種宏定義要求編譯預(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ù)行是在鍵人回車符之前先鍵入符號(hào)“\”。注意回車要緊接在符號(hào)“\”之后,中間不能插入其它符號(hào)。
宏定義的有效范圍稱為宏定義名的轄域,轄域從宏定義的定義結(jié)束處開始到其所在的源程序文件末尾。宏定義名的轄域不受分程序結(jié)構(gòu)的影響。可以用預(yù)處理命令#undef終止宏定義名的轄域。
在新的宏定義中,可以使用前面已定義的宏名。例如,
# define R 2.5
# define PI 3.1415926
# define Circle 2*PI*R
# define Area PI* R * R
程序中的Circle被展開為2*3.1415926* 2.5,Area被展開為3.1415926*2.5*2.5。
如有必要,宏名可被重復(fù)定義。被重復(fù)定義后,宏名原先的意義被新意義所代替。
通常,無參數(shù)的宏定義多用于定義常量。程序中統(tǒng)一用宏名表示常量值,便于程序前后統(tǒng)一,不易出錯(cuò),也便于修改,能提高程序的可讀性和可移植性。特別是給數(shù)組元素個(gè)數(shù)一個(gè)宏定義,并用宏名定義數(shù)組元素個(gè)數(shù)能部分彌補(bǔ)數(shù)組元素個(gè)數(shù)固定的不足。
注意:預(yù)處理程序在處理宏定義時(shí),只作字符序列的替換工作,不作任何語法的檢查。如果宏定義不當(dāng),錯(cuò)誤要到預(yù)處理之后的編譯階段才能發(fā)現(xiàn)。宏定義以換行結(jié)束,不需要分號(hào)等符號(hào)作分隔符。如有以下定定義:
# define PI 3.1415926;
原希望用PI求圓的周長(zhǎng)的語句
c=2*PI*r;
經(jīng)宏展開后,變成
c=2*3.1415926*r;
這就不能達(dá)到希望的要求。
相關(guān)推薦:推薦:2010年計(jì)算機(jī)軟件水平考試必備完美攻略北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |