如何告诉默认的c++版本(没有显式标志)为我的编译器
How to tell default c++ version (without explicit flag) for my compiler?
我使用gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)
去哪里找?我知道如何添加标志来强制使用GNU扩展的特定标准。
就像Jesper Juhl说的,检查文档可能是最好的。
如果你愿意,你也可以问你的编译器。
#include <iostream>
using namespace std;
int main(int, char**) {
cout << __cplusplus << endl;
return 0;
}
从GCC文档中预定义的宏,这将输出以下内容之一:
199711L适用于1998年c++标准,201103L适用于2011年c++标准,201402L适用于2014年c++标准,或者对于-std=c++1z和-std=gnu++1z启用的实验语言,
严格大于201402L的未指定值。
你试过阅读文档吗?man g++
是一个开始的地方…但是,要回答这个问题;默认情况下,gcc版本编译为c++ 98(实际上是GNU版本)。
如果你想在不阅读文档或不指定-std=
的情况下检测使用的c++版本,那么你可以尝试只使用c++ 98编译一些代码,一些使用c++ 03功能,c++ 11功能和c++ 14功能,看看它接受哪一个。但是阅读文档更容易。
您可以使用预定义的宏__cplusplus
:
$ echo __cplusplus | g++ -E -x c++ -c -
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"
199711L
命令行参数说明:
-
-E
-只运行预处理器 -
-x c++
-输入文件是一个c++源文件(__cplusplus
必须被定义) -
-c -
- read from stdin
或者,-dM
选项将转储所有预定义的宏:
$ g++ -dM -E -x c++ /dev/null | grep __cplusplus
#define __cplusplus 199711L
相关文章:
- 在 CMake 中为每个目标设置编译器/链接器标志
- Visual Studio 中是否有来自代码块的编译器标志的类似物?
- 如何将编译器标志限制为仅(我的)本地库?
- 为什么 gcc 编译器标志未知?
- 如何将编译器标志从 clang 传递给 nvcc
- 设置用于调试的 g++ 编译器标志
- 如何在 cmake 中设置编译器特定的标志
- 是否有任何编译器标志可以在下面的代码中用于报告有关 UB 的警告?
- std::function, Clang 6.0 & MSVC (10.0017134.12) - 可能的 ABI 错误或必需的编译器标志
- 是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?
- CMAKE 如何在 C++ 中将编译器标志附加到末尾
- 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?
- 如何在 Visual Studio Code 中包含编译器标志
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- 使用 noexcept 和编译器标志来关闭异常
- 运行时附加编译器标志
- 链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
- 不能在 Solaris 的最新编译器中使用带有新 c+11 标志的 xercesc
- 在每个平台上使用相同的模拟,具有正确的编译器标志
- 如何在 CMake 中添加"-l" (ell) 编译器标志