[英]Is it possible to set g++ to follow C++11 ISO (-std=c++11) through #define?
我對c ++ 11很新,我想知道一些事情......
我正在使用Code :: Blocks,如果我在這個IDE中使用c++11
,我必須轉到編譯器設置,並檢查“讓Have g++ follow the C++11 ISO C++ language standard
”
是否有任何解決方法,所以我可以設置一個.cpp
文件在這樣的#define
語句中使用c++11
?
注意:這是一個“構建”文件,而不是項目
通過在不在項目中時設置編譯選項,它會將其設置為我不希望發生的全局編譯選項
我知道您可以在Project Files中自定義構建選項,它只為該項目設置c++11
#include <iostream>
#define -std c++11
int main(){
#if __cplusplus==201402L
std::cout << "C++14" << std::endl;
#elif __cplusplus==201103L
std::cout << "C++11" << std::endl;
#else
std::cout << "C++" << std::endl;
#endif
return 0;
}
我發現了什么:
更改#define __cplusplus 201103L
不是一個好主意,因為它沒有將編譯器設置為編譯為c++11
雖然我可以看到源文件在這方面如何自我記錄,但這是不可能的。
接下來最好的是測試一致性,就像你開始做的那樣:
#if __cplusplus < 201103L
#error This source must be compiled as C++11 or later
#endif
這確保了使用C ++ 03編譯器進行編譯將立即提供簡單易懂的錯誤消息。
是否可以通過
#define
將g ++設置為遵循C ++ 11 ISO(-std=c++11
)?
不 。
C ++和g ++都沒有這個功能。 您可能希望手動構建簡單的單文件程序。
不 。
你不應該改變#define __cplusplus
。 閱讀更多如何觸發__cplusplus(C ++)#ifdef? ,因為__cplusplus
應該由C ++編譯器自動定義。 這就是為什么更改版本意味着通過編譯器設置完成。
例如,讓文件跟隨C ++ 11是沒有意義的,而其他文件則遵循C ++ 14。 整個項目應該以同質的方式編制。
請注意,您的代碼無法編譯: 錯誤:宏名稱必須是使用#ifdef 0的標識符 。
PS:如果您所描述的是一個好主意,那么在可讀性和維護方面會是多么噩夢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.