如何告诉默认的c++版本(没有显式标志)为我的编译器

How to tell default c++ version (without explicit flag) for my compiler?

本文关键字:标志 编译器 我的 默认 何告诉 c++ 版本      更新时间:2023-10-16

我使用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