使用 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 上,如果我输入 cmd 命令 g++ example.cpp ,它将失败。我认为这是一长串错误,主要是由于链接器抱怨无法从 string 转换为 const char*

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

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

原文由 Manuel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 479
1 个回答

C 和 C++ 的默认语言标准在 GCC 手册中指定。您可以通过以下方式找到这些:

浏览到 https://gcc.gnu.org/onlinedocs/

选择您感兴趣的 GCC 版本的 GCC #.## Manual 链接,例如 GCC 7.5.0:

https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/

单击主题链接 GCC 支持的语言标准,然后单击主题 C++ 语言(或 C 语言)。这些主题中的任何一个都会有一个句子,例如:

如果没有给出 C++ 语言方言选项,则默认值为 -std=gnu++14。

如果没有给出 C 语言方言选项,则默认值为 -std=gnu11。

以上两个例子是针对 GCC 7.5.0 的。

原文由 MikeOnline 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题