使用g编译时,哪个C标准是默认值?

我有一段代码如下所示.假设它位于名为example.cpp的文件中

#include <fstream>
#include <string> // line added after edit for clarity

int main() {
    std::string filename = "input.txt";
    std::ifstream in(filename);

    return 0;
}

在Windows上,如果我在命令g example.cpp中键入cmd,它将失败.这是一个很长的错误列表,我认为主要是由于链接器抱怨无法从字符串转换为const char *.

但是如果我使用像这样的附加参数运行编译器:g -std = c 17 example.cpp,它将编译并正常工作而没有任何问题.

当我运行前命令时会发生什么?我猜测C编译器的默认版本标准被调用,但我不知道哪个?作为程序员/开发人员,我应该总是使用后一个命令和额外的参数吗?

解决方法:

如果您的g版本晚于4.7,我认为您可以找到支持的C标准的默认版本,如下所示:

g++ -dM -E -x c++  /dev/null | grep -F __cplusplus

我的机器的一个例子:

mburr@mint17 ~ $g++ --version | head -1
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
mburr@mint17 ~ $g++ -dM -E -x c++  /dev/null | grep -F __cplusplus
#define __cplusplus 199711L

一些参考:

> Details on the g++ options used
> Why this only works for g++ 4.7 or later

上一篇:C语言|博客作业02


下一篇:从零构建通讯器--4.3日志打印实战,优化main函数调用顺序