在GNU C++編譯器似乎限定__cplusplus
是1
Gnu C++宏__cplusplus標準符合?
#include <iostream>
int main() {
std::cout << __cplusplus << std::endl;
}
這將打印1
與標準C++模式GCC,以及C++ 0x中模式,具有gcc 4.3.4,和gcc 4.7.0。
的C++ 11 FDIS說,在「16.8預定義宏名[cpp.predefined]」該
編譯C++翻譯單元時,名稱
__cplusplus
被定義到值201103L。 (腳註:它的目的,這一標準的未來版本將取代這個宏具有較大值的值不合格的COM pilers應使用與最多5個十進制數字的值。)
的老舊的C++ 03也有類似的規則。
GCC是否故意將其設置爲1
,因爲它是「不符合」?
通過閱讀該列表,我認爲如果我有一個支持C++ 11的編譯器,我可以使用__cplusplus
以便攜方式檢查。但用g ++這似乎不起作用。我知道...EXPERIMENTAL...
宏,但很好奇爲什麼g ++這樣定義__cplusplus
。
我最初的問題是在不同的空指針變體之間切換。事情是這樣的:
#if __cplusplus > 201100L
# define MYNULL nullptr
#else
# define MYNULL NULL
#endif
有沒有實現這樣一個開關的簡單和合理的可移植的方式?
附註:我沒有完全讀過這個主題,但這被認爲是g ++中的一個bug(10年前!),並在4.7.0中修復:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=1773 – birryree
'#ifndef nullptr'' #define nullptr NULL''#endif'或#ifdef nullptr'' #define MYNULL nullptr'' else'' #define MYNULL NULL'' #endif' –