爲什麼下面的代碼會被編譯?#ifdef指令末尾的額外令牌
#ifdef C++11
// ...
#endif
int main() {}
GCC 4.8.0給了我以下警告:
額外的令牌在#ifdef指令
末根據標準,宏的名稱只能包含字母,數字和下劃線字符。
也許是因爲這個?
ISO/IEC 14882:2011
16.1條件包含[cpp.cond]
6每個指令的條件是爲了檢查。如果它的計算結果爲 false(零),則它所控制的組被跳過:指令 僅通過確定指令的名稱進行處理,以 的順序跟蹤嵌套條件的級別;其餘 指令的預處理令牌將被忽略,其他 預處理令牌也會被忽略。只處理控制 條件評估爲真(非零)的第一組。如果 條件中沒有一個條件的計算結果爲true,並且存在#else指令,則處理由#else控制的組 ;缺少#else指令, 直到#endif跳過所有組.151
我無法正確理解此引號。
我相信預處理器標識符遵循與變量標識符相同的規則,儘管大寫是首選。 「C++ 11」不起作用。這個SO問題應該可以幫助你:http://stackoverflow.com/questions/10717502/is-there-a-preprocessor-directive-for-detecting-c11x-support – 2013-04-10 20:01:15
@Eric Jablow我知道__cplusplus宏,我想知道爲什麼這個代碼編譯在gcc 4.8.0,clang 3.2,icc 13.0.1和MSVC-11 – FrozenHeart 2013-04-10 20:26:47
對不起。我應該讀得更好。也許GCC太寬容了。 – 2013-04-10 20:40:59