让Code::Blocks和Visual Studio中的C++编译器遵守C++(11)标准

Getting the C++ compilers in Code::Blocks and Visual Studio to adhere to C++(11) standard?

本文关键字:C++ 标准 编译器 中的 Blocks Code Visual Studio      更新时间:2023-10-16

我使用了两个C++编译器/IDE。(1) 代码::块中的g++和(2)Visual Studio中的Visual C++。

我有一些关于如何按照我想要的方式设置编译器的问题。

代码::块:我想让G++遵循标准C++。例如:

int x; 
cin >> x; 
int arr[x];

在标准C++中不起作用。

在标准C++中,必须使用动态分配。例如,Visual C++编译器会拒绝此代码。但是,此代码可以在code::Blocks中工作。

如何使g++拒绝此代码?

此外,我如何告诉g++和Visual C++2013遵循并且只遵循C++11标准?在我看来,默认的仍然是C++98/03。

用于标准一致性的编译器选项

使用g++,您至少需要

  • CCD_ 1
  • -pedantic警告使用语言扩展
  • -Wall -Wextra将警告级别提高到合理级别

使用Visual C++,您至少需要

  • CCD_ 4以关闭详细版本和版权消息
  • CCD_ 5开启异常支持
  • /GR打开RTTI支持,运行时类型信息dynamic_cast
  • /W4将警告级别提高到合理级别

在Visual C++中,没有特殊的选项来指示C++标准版本。

如何为命令行使用预设选项

MinGW g++通常(Nuwen发行版除外)默认生成依赖于位于MinGW\bin目录中的DLL的可执行文件,这意味着您通常需要在PATH环境变量中使用它。

这意味着通过批处理文件、快捷方式或命令intelpreter宏添加选项不是一个好主意。相反,请使用选项-std=c++110和重定向在以下Windows命令指定的目录中创建specs文件(使用该名称):

g++ --print-search-dirs | find "install:"

阅读如何编辑该文件,然后修复它。;-)

您可能希望将CPATH环境变量设置为常规include目录。

使用Visual C++:

  • 编译器选项可以在CL环境变量中预设
  • INCLUDE变量中包含路径
  • LIB变量中的库路径
  • 链接器选项可以在LINK变量中预设

对于链接器选项,您可能希望/entry:mainCRTStartup在生成GUI子系统可执行文件时也支持普通标准main启动功能。然而,这与MFC有点冲突。我做MFC已经很多年了,所以如果你想要详细信息或解决方案,请发布一个其他人可以回答的单独问题。

如何在每个IDE中设置选项(代码::块,Visual Studio)

这就像阅读每个IDE的文档一样简单。;-)

请注意,选项既可以全局设置,也可以按项目设置。