簡體   English   中英

是否可以通過#define將g ++設置為遵循C ++ 11 ISO(-std = c ++ 11)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM