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

标签 c++ c++11 visual-studio-2013 codeblocks

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

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

Code::Blocks:我想让 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++,你至少需要,

  • -std=c++11 用于 C++11 标准。
  • -pedantic 警告使用语言扩展。
  • -Wall -Wextra 将警告级别提高到合理水平。

对于 Visual C++,您至少需要,

  • /nologo 关闭冗长的版本和版权信息,
  • /EHsc 开启异常支持,
  • /GR 打开 RTTI 支持,运行时类型信息,例如 dynamic_cast
  • /W4 将警告级别提高到合理。

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

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

MinGW g++ 通常(一个异常(exception)是 Nuwen 发行版)默认生成依赖于驻留在 mingw\bin 目录中的 DLL 的可执行文件,这意味着您通常需要在 PATH 环境变量中.

这意味着通过批处理文件或快捷方式或命令解释器宏添加选项并不是一个好主意。而是使用选项 -dumpspecs 和重定向在这个 Windows 命令指定的目录中创建一个 specs 文件(具有该名称):

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

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

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

使用 Visual C++:

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

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

如何在每个 IDE 中设置选项(Code::Blocks、Visual Studio)。

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

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

关于c++ - 让 Code::Blocks 和 Visual Studio 中的 C++ 编译器遵守 C++(11) 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147596/

相关文章:

c++ - 如何简洁地创建一个 shared_ptr?

Fedora 19 上的 C++11/g++4.8 regex_match 段错误

visual-studio - 谁把 "Stack Overflow"的东西放在我的 VS 2013 标题中?

python - Python 导演类中的 Swig 异常

c++ - c++如何知道new/delete之后指向内存的哪里?

C++0x 性能改进

visual-studio-2013 - nuget 网站的 DNS 问题导致全局 NuGet 包恢复失败

c++跨多个.cpp文件调用函数?

c++ - 如何从作为模板参数传递的类中获取静态模板方法的地址

c++ - Visual Studio 2013 代码分析卡在 native 代码上