** C/C++ 程序的編譯預處理和條件編譯指令詳解**
編譯預處理
#include 包含指令作用爲 將一個源文件嵌入到當前源文件中該點處。
#include<文件名> : 按標準方式搜索,文件位於C++系統目錄的include子目錄下
#include"文件名" : 首先在當前目錄中搜索,若沒有,再按標準方式搜索。
#define 宏定義指令
定義符號常量,很多情況下已被const定義語句取代。
定義帶參數宏,已被內聯函數取代。
#undef 用來刪除由#define定義的宏,使之不再起作用。
條件編譯指令情況一
#if 常量表達式1
程序正文1 //當“ 常量表達式1”非零時編譯
#elif 常量表達式2
程序正文2 //當“ 常量表達式2”非零時編譯
#else
程序正文3 //其他情況下編譯
#endif
條件編譯指令情況二:
如果“標識符”經#defined定義過,且未經undef刪除,則編譯程序段1;否則編譯程序段2。
#ifdef 標識符
程序段1
#else
程序段2
#endif
條件編譯指令情況三:
如果“標識符”未被定義過,則編譯程序段1;否則編譯程序段2。
#ifndef 標識符
程序段1
#else
程序段2
#endif
注意:可用宏定義來實現條件編譯(#define #undef #ifdef)。 現實的程序有DEBUG版本(定義了DEBUG宏,可以用來調試)和RELEASE版本(將#define DEBUG 去掉了,去掉的方法可以用//註釋掉,也可以用#undef DEBUG 。執行效果就是沒有任何調試信息,程序會加快運行,不影響程序的執行效率),區別就是編譯時有無定義DEBUG宏。
例如:
#include <stdio.h>
//#define DEBUG
#undef DEBUG //#undef XXX 用來註銷一個宏。如果前面有定義這個宏則取消這個宏
#ifdef DEBUG
#define debug(x) printf(x)
#else
#define debug(x)
#endif
int main(void)
{
debug(“this is a debug info. \n”);
return 0;
}