我使用两个 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/