預處理就是在進行編譯的第一遍詞法掃描和語法分析之前所作的工作。說白了,就是對源文件進行編譯前,先對預處理部分進行處理,然後對處理後的代碼進行編譯。這樣做的好處是,經過處理後的代碼,將會變的很精短。
關於預處理命令中的文件包含(#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");
#else
printf("之前NUM沒有過定義!:( \n");
#endif
}
如果程序開頭有#define NUM這行,即NUM有定義,碰到下面#ifdef NUM的時候,當然執行第一個printf。否則第二個printf將被執行。
我認爲,用這種,可以很方便的開啓/關閉整個程序的某項特定功能。
2:情況2:
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
這裏使用了#ifndef,表示的是if not def。當然是和#ifdef相反的狀況(如果沒有定義了標識符_XXXX,那麼執行程序段1,否則執行程序段2)。例子就不舉了。
3:情況3:
#if 常量
...程序段1...
#else
...程序段2...
#endif
這裏表示,如果常量爲真(非0,隨便什麼數字,只要不是0),就執行程序段1,否則執行程序段2。
這種方法可以將測試代碼加進來。當需要開啓測試的時候,只要將常量變1就好了。而不要測試的時候,只要將常量變0。
預處理的一下常用方法#ifdef\#if\#define
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
How to split string in C++(分割字符串)
_John_Tian_
2018-08-27 19:36:19
OpenCV shape detection -- C++版本
_John_Tian_
2018-08-27 19:36:13
libcurl console 中文亂碼
_John_Tian_
2018-08-27 19:36:13
SOCKADDR和SOCKADDR_IN的區別
cuicansdii
2018-08-27 16:13:51
c++多態性原理及應用 & c++以及cuda 計時技術小結
Takatsukii
2018-08-27 14:24:45
eof()-檢查文件讀取是否達到文件末尾
Takatsukii
2018-08-27 14:24:41
Comparison of several number rounding methods
Takatsukii
2018-08-27 14:24:41
windows 環境下 cpp 文件命令行編譯的配置 & 帶參數的main函數的編譯和運行
Takatsukii
2018-08-27 14:24:40
cin.getline用法說明 - from C++ reference
Takatsukii
2018-08-27 14:24:36
學習C++:實踐者的方法(Beta1)By 劉未鵬(pongba)
zhangshoucheng
2018-08-27 11:48:11
使用 DLL 的優點
Arraylib
2018-08-27 09:33:45
SGI STL源碼學習
Arraylib
2018-08-27 09:33:43
_tmain()和main()區別
Arraylib
2018-08-27 09:33:43