#if defined和#if !defined(c語言的宏定義)
因爲對於一個大程序而言,我們可能要定義很多常量( 不管是放在源文件還是頭文件 ),那麼我們有時考慮定義某個常量時,我們就必須返回檢查原來此常量是否定義,但這樣做很麻煩.if defined宏正是爲這種情況提供瞭解決方案.舉個例子,如下:
#define ....
#define ....
....
....
#define a 100
....
此時,我們要檢查a是否定義(假設我們已經記不着這點了),或者我們要給a一個不同的值,就加入如下句子
#if defined a
#undef a
#define a 200
#endif
上述語句檢驗a是否被定義,如果被定義,則用#undef語句解除定義,並重新定義a爲200
同樣,檢驗a是否定義:
#ifndef a //如果a沒有被定義
#define a 100
#endif
以上所用的宏中:#undef爲解除定義,#ifndef是if not defined的縮寫,即如果沒有定義。
這就是#if defined 的唯一作用!
1)
#if defined XXX_XXX
#endif
是條件編譯,是根據你是否定義了XXX_XXX這個宏,而使用不同的代碼。
一般.h文件裏最外層的
#if !defined XXX_XXX
#define XXX_XXX
#endif
是爲了防止這個.h頭文件被重複include。
2)
#error XXXX
是用來產生編譯時錯誤信息XXXX的,一般用在預處理過程中;
例子:
#if !defined(__cplusplus)
#error C++ compiler required.
#endif