預處理就是在進行編譯的第一遍詞法掃描和文法分析之前所作的工作。說白了,就是對源檔案進行編譯前,先對預處理部分進行處理,然後對處理後的代碼進行編譯。這樣做的好處是,經過處理後的代碼,将會變的很精短。
關于預處理指令中的檔案包含(#include),宏定義(#define),書上已經有了詳細的說明,在這裡就不詳述了。這裡主要是對條件編譯(#ifdef,#else,#endif,#if等)進行說明。以下分3種情況:
1:情況1:
#ifdef _XXXX
...程式段1...
#else
...程式段2...
#endif
這表明如果辨別符_XXXX已被#define指令定義過則對程式段1進行編譯;否則對程式段2進行編譯。
例:
#define NUM
.............
#ifdef NUM
printf("之前NUM有過定義啦!:) /n");
printf("之前NUM沒有過定義!:( /n");
}
如果程式開頭有#define NUM這行,即NUM有定義,碰到下面#ifdef NUM的時候,當然執行第一個printf。否則第二個printf将被執行。
我認為,用這種,可以很友善的開啟/關閉整個程式的某項特定功能。
2:情況2:
#ifndef _XXXX
這裡使用了#ifndef,表示的是if not def。當然是和#ifdef相反的狀況(如果沒有定義了辨別符_XXXX,那麼執行程式段1,否則執行程式段2)。例子就不舉了。
3:情況3:
#if 常量
這裡表示,如果常量為真(非0,随便什麼數字,隻要不是0),就執行程式段1,否則執行程式段2。
我認為,這種方法可以将測試代碼加進來。當需要開啟測試的時候,隻要将常量變1就好了。而不要測試的時候,隻要将常量變0。