首先在C++中,以#
開頭的都是預處理命令。預處理功能包含:宏定義,文件包含,條件編譯:如下
#define N //宏定義
#inclued"stdio.h" //頭文件包含
#ifndef //條件編譯
1.#ifndef
防止頭文件被多重調用:如果在h文件中定義了全局變量,一個c文件包含同一個h文件多次,如果不加#ifndef宏定義,會出現變量重複定義的錯誤;如果加了#ifndef,則不會出現這種錯誤
作爲一種判斷使用,根據是否定義一個變量來進行分支選擇,一般用於調試;
例如:
#ifndef A
#define A
#endif
****B****
執行上述命令行,檢查程序中A
是否被宏定義過,如果沒有則定義宏A
,如果宏A
被定義了,則執行B
,忽略A;#ifndef
要與#endif
一起使用
2. #define name
爲宏定義命令,對於程序中出現的宏名,都使用宏定義中的字符串去代換,這裏的字符串可以是常數,表達式或者格式串等。
C++中宏的定義可分爲有參數宏定義和無參數宏定義;
例如:
無參數宏定義
#define A 10
在程序中A始終代表10;
有參數宏定義:
#define A(x) (x*x+2*x+1)
a = A(2); /*宏調用*/
再如:
#define B(x,y) ((x>y)?x:y)
int a,b,max;
max = B(a,b);
printf("a和b的最大值:%d\n",max);