0.10 — 配置你的编译器:编译器扩展

C++ 标准定义了程序在特定情况下应如何行为的规则。在大多数情况下,编译器会遵循这些规则。然而,许多编译器会实现自己对语言的更改,通常是为了增强与语言其他版本(例如 C99)的兼容性,或出于历史原因。这些特定于编译器的行为称为编译器扩展

编写使用编译器扩展的程序会使你编写的程序与 C++ 标准不兼容。使用非标准扩展的程序通常无法在其他编译器(不支持这些扩展的编译器)上编译,即使编译成功,也可能无法正确运行。

令人沮丧的是,编译器扩展通常默认启用。这对新学习者来说尤其有害,他们可能认为某些有效的行为是官方 C++ 标准的一部分,而实际上他们的编译器只是过于宽松。

因为编译器扩展永远不是必需的,并且会导致你的程序不符合 C++ 标准,所以我们建议关闭编译器扩展。

最佳实践

禁用编译器扩展,以确保你的程序(和编码实践)符合 C++ 标准,并且可以在任何系统上运行。

禁用编译器扩展

对于 Visual Studio 用户

要禁用编译器扩展,请在解决方案资源管理器窗口中右键单击你的项目名称,然后选择属性

Solution Explorer Properties

项目对话框中,首先确保配置字段设置为所有配置

然后,点击C/C++ > 语言选项卡,并将符合模式设置为是 (/permissive-)(如果它默认不是这个设置)。

Disable Language Extensions

对于 Code::Blocks 用户

通过设置菜单 > 编译器 > 编译器标志选项卡禁用编译器扩展,然后找到并勾选-pedantic-errors选项。

Disable Language Extensions

对于 gcc 和 Clang 用户

你可以通过在编译命令行中添加-pedantic-errors标志来禁用编译器扩展。

对于 VS Code 用户

  • 打开 tasks.json 文件,找到 "args",然后在该部分中找到 "${file}" 行。
  • "${file}" 行上方,添加一行包含以下命令的新行

"-pedantic-errors",

截至撰写本文时,VS Code 不会自动在缺少换行符的代码文件末尾添加换行符(这是 C++ 标准严格要求的)。幸运的是,我们可以告诉 VS Code 这样做

  • 打开 VS Code 并转到文件(如果使用 Mac 则是 Code)> 首选项 > 设置。这将打开一个设置对话框。
  • 在搜索栏中输入 insert final newline
  • 工作区设置用户设置选项卡中,确保勾选标有文件:插入最终换行符的复选框。

相关内容

Xcode 用户可以参考Rory 的评论,他慷慨地提供了说明。

提醒

这些设置是按项目应用的。你每次创建新项目时都需要设置它们,或者一次创建一个带有这些设置的模板项目,然后用它来创建新项目。

guest
您的电子邮箱地址将不会被显示
发现错误?请在上方留言!
与勘误相关的评论在处理后将被删除,以帮助减少混乱。感谢您帮助使网站对每个人都更好!
来自 https://gravatar.com/ 的头像与您提供的电子邮箱地址相关联。
有回复时通知我:  
228 评论
最新
最早 最多投票
内联反馈
查看所有评论