C/C++ 程序的編譯預處理和條件編譯

** 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章