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