簡體   English   中英

在G ++編譯命令中包含-std = c ++ 0x有什么意義?

[英]What's the point of including -std=c++0x in a G++ compile command?

我最近開始學習C ++,因為我在Linux上,我正在使用G ++進行編譯。

現在,我正在關注的教程說

如果您碰巧擁有具有開發功能的Linux或Mac環境,您應該能夠直接從終端編譯任何示例,只需在編譯器的命令中包含C ++ 11標志:

並告訴我使用此命令進行編譯: g++ -std=c++0x MY_CODE.cpp -o MY_APP

現在,我想知道, std=c++0x標志的重點是什么? 是必需的,還是我可以運行g++ MY_CODE.cpp -o MY_APP

默認情況下,GCC編譯C ++ - gnu++98代碼,這是一種說C ++ 98標准加上大量gnu擴展的奇特方式。

你用-std=??? 對編譯器說它應該遵循什么標准。
不要忽略-pedantic ,否則它會忽視標准一致性。

您可以選擇的選項:

standard          with gnu extensions

c++98             gnu++98
c++03             gnu++03
c++11 (c++0x)     gnu++11 (gnu++0x)
c++14 (c++1y)     gnu++14 (gnu++1y)

接下來:

c++1z             gnu++1z (Planned for release sometime in 2017, might even make it.)

GCC手冊: https//gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Standards.html#Standards

另外,請求完整的警告,所以添加-Wall -Wextra

有預處理程序定義,用於使庫包含其他檢查

  • _GLIBCXX_CONCEPT_CHECKS為某些模板先決條件添加額外的編譯時檢查。 請注意,這些檢查實際上並不總是按照應有的方式執行,因此不推薦使用。
  • _GLIBCXX_DEBUG 啟用庫調試模式。 這具有相當大的運行時開銷。
  • _GLIBCXX_DEBUG_PEDANTIC與上面相同,但是檢查標准要求而不是僅針對實現。

您希望使用C ++ 11標准(並且您希望這樣做),但C ++ 11在舊C ++ 98標准方面取得了巨大進步。

但舊版本的GCC(即GCC 4.8或更早版本)尚未在標准本身之前完成(因此它們接受-std=c++0x標志)。 我強烈建議(如果你想要C ++ 11)使用最新版本的GCC ,即GCC 4.9 修復GCC 4.9.2版本的錯誤出現在2014年10月底。請使用它,並將std=c++11標志傳遞給它,告訴編譯器你想要C ++ 11一致性。

我實際建議傳遞std=c++11 -Wall -Wextra -g來獲取C ++ 11,所有警告和調試信息。 一旦你調試了你的程序(使用gdb ,你最好還使用最新版本的gdb !),你可能會要求編譯器使用-O2進行優化(如果你想為自己的計算機進行優化,可能需要-mtune=native

來源供您參考:

main.cpp中

#include <iostream>
using namespace std;

int main()
{
    cout << "Test main CPP" << endl;
    return 0;
}

build.sh

rm demoASI*
echo "**cleaned !!**"

##### C++ 11 Compliance #####
# type ONE
g++ -o demoASI_1 -std=c++0x main.cpp
echo "**rebuild-main-done (C++ 11 Compilation) !**"

# type TWO
g++ -o demoASI_2 -std=c++11 main.cpp
echo "**rebuild-main-done (C++ 11 Compilation) !**"

##### C++ 11+ Compliance #####
# type THREE
g++ -o demoASI_3 -std=c++1y main.cpp
echo "**rebuild-main-done (C++ 11+ (i.e. 1y, but not C++14) Compilation) !**"

###### C++ 14 Compliance  ######
# type FOUR
g++ -o demoASI_4 -std=c++14 main.cpp
if [ $? -eq 0 ]
then
    echo "**rebuild-main-done (C++ 14 Compilation) !** :: SUCCESS"
else
    echo "**rebuild-main-done (C++ 14 Compilation) !** :: FAILED"
fi

現在,執行腳本為; ./build.sh (假設build.sh具有執行權限)

您可以先檢查g++編譯器的版本,因為;

g ++ --version

在4.3之后,g ++的版本支持c ++ 11

請參閱編譯器中的c ++ 14支持信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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