C++中的條件編譯,分爲三種形式,分別以下:ios
1.#ifdef define_name測試
#…………..3d
#elsecode
#………….orm
#endifci
這種形式的條件編譯,意思大概就是:若是定義了宏define_name,就執行#ifdef define_name到#else以前的代碼,不然執行#else到#endif之間的代碼,其中#else能夠省略。it
2.#ifndef define_nameio
#…………………編譯
#elsetable
#………………..
#endif
含義:若是定義了宏define_name,就執行#else到#endif之間的代碼,不然執行#ifndef define_name到#else之間的代碼,其中#else也能夠省略。
3.#if 表達式
#……….
#else
#……………
#endif
這種形式的宏,跟if和else的用法差很少,若是表達式的值爲真,則執行#if 表達式 到#else之間的代碼,不然執行#else到#endif之間的代碼,其中#else也能夠省略。
有時咱們可能會不止判斷兩種條件,可能有多種,相似:if……else if…..else if ……else ,這時咱們就徹底能夠使用#elif來完成咱們想要的條件編譯
#if 表達式
#………..
#elif 表達式
#………..
#else
#……….
#endif
另外還有一種宏有點特殊,以下:
#if defined(__sgi) cout << "__sgi" << endl; #endif
這小段代碼的意思是:若是定義了宏__sgi,條件表達式的值爲真,不然爲假,而後再執行相應的代碼。
其實,上述的這段小代碼也能夠用#ifdef來實現,看我的喜愛罷了。
有時,咱們看到別人寫的宏,會產生疑問,以下:
#if 0 # include<new> # define __THROW__BAD__ALLOC throw bad_alloc #elif !defined(__THROW__BAD__ALLOC) # include<iostream> # define __THROW__BAD__ALLOC cerr<<"out of memory"<<endl;exit(1) #endif
咱們平時用if和else時,若是if條件下面有多個表達式語句,咱們要用{}將其括起來,而宏中怎麼沒呢?剛開始的時候,我也有點小疑惑,後面本身測試了一下,發現宏中的能夠不用{}將其條件斷定下面的多個表達式語句括起來。