0.10--配置编译器:编译器扩展[译]
原文:0.10--配置编译器:编译器扩展 作者:Alex
C++ 标准定义了程序在特定情况下应如何运行的规则。在大多数情况下,编译器会遵循这些规则。然而,许多编译器对语言进行了自己的更改,通常是为了增强与其他版本的语言(例如 C99)的兼容性,或者出于历史原因。这些特定于编译器的行为称为编译器扩展。
编写使用编译器扩展的程序允许您编写与 C++ 标准不兼容的程序。使用非标准扩展的程序通常不会在其他编译器(不支持这些相同的扩展)上编译,或者即使编译,也可能无法正确运行。
令人沮丧的是,编译器扩展通常是默认启用的。这对于新学习者来说尤其有害,他们可能认为某些有效的行为是官方 C++ 标准的一部分,而事实上他们的编译器只是过于宽容。
由于编译器扩展从来都不是必需的,并且会导致您的程序不符合 C++ 标准,因此我们建议关闭编译器扩展。
最佳做法
禁用编译器扩展以确保您的程序(和编码实践)保持符合 C++ 标准并且可以在任何系统上运行。
禁用编译器扩展
对于 Visual Studio 用户
要禁用编译器扩展,请在“解决方案资源管理器”窗口中右键单击您的项目名称,然后选择“属性”:
在“项目”对话框中,首先确保“配置”字段设置为“所有配置”。
然后,单击 C/C++ > 语言选项卡,并将一致性模式设置为是 (/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。- 在“工作区设置”和“用户设置”选项卡中,确保选中标记为“文件:插入最终换行符”的复选框。


浙公网安备 33010602011771号