天天看點

#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是否定義:
#ifndefa   
  //如果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