C++ 标准定义了程序在特定情况下应如何运行的规则。在大多数情况下,编译器会遵循这些规则。然而,许多编译器对语言进行了自己的更改,通常是为了增强与其他版本的语言(例如 C99)的兼容性,或者出于历史原因。这些特定于编译器的行为称为编译器扩展。
编写使用编译器扩展的程序允许您编写与 C++ 标准不兼容的程序。使用非标准扩展的程序通常不会在其他编译器(不支持这些相同的扩展)上编译,或者即使编译,也可能无法正确运行。
令人沮丧的是,编译器扩展通常是默认启用的。这对于新学习者来说尤其有害,他们可能认为某些有效的行为是官方 C++ 标准的一部分,而事实上他们的编译器只是过于宽容。
由于编译器扩展从来都不是必需的,并且会导致您的程序不符合 C++ 标准,因此我们建议关闭编译器扩展。
禁用编译器扩展以确保您的程序(和编码实践)保持符合 C++ 标准并且可以在任何系统上运行。
禁用编译器扩展
对于 Visual Studio 用户
要禁用编译器扩展,请在“解决方案资源管理器”窗口中右键单击您的项目名称,然后选择“属性”:
在“项目”对话框中,首先确保“配置”字段设置为“所有配置”。
然后,单击C/C++ > 语言选项卡,并将一致性模式设置为yes(/permissive-)(如果默认情况下尚未设置)。
对于 Code::Blocks 用户
通过设置菜单 > 编译器 > 编译器标志选项卡禁用编译器扩展,然后找到并选中-pedantic-errors选项。
对于 GCC/G++ 用户
您可以通过将-pedantic-errors标志添加到编译命令行来禁用编译器扩展。
对于 VS Code用户
- 打开tasks.json 文件,查找
"args"
,然后找到该部分中的行"${file}"
。 - 在该
"${file}"
行上方添加一个包含以下命令的新行:
"-pedantic-errors",
截至撰写本文时,VS Code 不会自动在缺少换行符的代码文件末尾添加换行符(C++ 标准迂腐地要求这样做)。幸运的是,我们可以告诉 VS Code 这样做:
- 打开 VS Code 并转到文件(如果使用 Mac,则为 Code)> 首选项 > 设置。这将打开一个设置对话框。
- 进入
insert final newline
搜索栏。 - 在“工作空间设置”和“用户设置”选项卡中,确保选中标记为“文件:插入最终换行符”的复选框。
原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/cpp-compiler-extensions/