在G ++编译命令中包含-std = c ++ 0x有什么意义?

时间:2014-11-08 22:18:06

标签: c++ linux c++11 g++

我最近开始学习C ++,因为我在Linux上,所以我正在使用G ++进行编译。

现在,我正在关注的教程说

  

如果您碰巧拥有开发的Linux或Mac环境   功能,您应该能够直接编译任何示例   从一个终端只是通过在命令中包含C ++ 11标志   编译器:

并告诉我使用此命令进行编译:{{1​​}}。

现在,我想知道,g++ -std=c++0x MY_CODE.cpp -o MY_APP旗帜有什么意义?是必需的,还是我可以运行std=c++0x

3 个答案:

答案 0 :(得分:11)

默认情况下,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

making the library include additional checks有预处理程序定义:

  • _GLIBCXX_CONCEPT_CHECKS为某些模板先决条件添加额外的编译时检查。请注意,这些检查实际上并不总是按照应有的方式进行,因此不予批准。
  • _GLIBCXX_DEBUG。启用库调试模式。这有很大的运行时开销。
  • _GLIBCXX_DEBUG_PEDANTIC与上述相同,但会检查标准要求,而不是仅针对实施。

答案 1 :(得分:4)

你想使用C++11标准(并且你想要那样),但是C ++ 11在w.r.t上取得了巨大的进步。它的旧版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如果您想为自己的计算机进行优化,那么

答案 2 :(得分:1)

供您参考:

  

的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++编译器的版本,如<; p>

  

g ++ --version

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

请参阅编译器中的c++14支持信息。