配置编译器:警告和错误级别

当您编写程序时,编译器将检查以确保您遵循 C++ 语言的规则(假设您已关闭编译器扩展)。

如果您所做的事情确实违反了语言规则,则在编译期间,编译器将发出错误提供包含错误的行号以及一些有关预期内容和发现内容的文本。实际的错误可能位于该行或前一行。识别并修复错误的代码行后,您可以尝试再次编译。

在其他情况下,编译器可能会发现代码看起来可能有错误,但编译器无法确定。在这种情况下,编译器可能会选择发出警告。警告不会停止编译,而是通知程序员某些地方似乎有问题。

在大多数情况下,可以通过修复警告指出的问题或通过重写生成警告的代码行以不再生成警告来解决警告。

在极少数情况下,可能需要明确告诉编译器不要为相关代码行生成特定警告。C++ 不支持执行此操作的官方方法,但许多单独的编译器(包括 Visual Studio 和 GCC)提供了解决方案(通过不可移植的 #pragma 指令)来暂时禁用警告。

提高警告级别

默认情况下,大多数编译器只会生成有关最明显问题的警告。但是,您可以要求编译器提高警告级别。

对于 Visual Studio 用户

要提高警告级别,请在“解决方案资源管理器”窗口中右键单击项目名称,然后选择“属性”

配置编译器:警告和错误级别

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

然后选择C/C++ > General 选项卡并将警告级别设置为Level4 (/W4)

配置编译器:警告和错误级别

注意:请勿选择EnableAllWarnings (/Wall),否则您将被 C++ 标准库生成的警告所淹没。

Visual Studio 默认情况下禁用签名/未签名转换警告,这些警告很有用,因此如果您使用的是 Visual Studio 2019 或更高版本,请启用这些警告:

  • C/C++ > Command Line 选项卡中,在Another Options下,添加/w44365. 这告诉编译器在警告级别 4 上启用有符号/无符号转换警告(您在上面启用了该警告)。
  • C/C++ > 外部包含选项卡中,将外部标头警告级别设置为Level3 (/external:W3)。这告诉编译器以警告级别 3(而不是 4)编译标准库标头,以便编译这些标头不会触发此警告。

“外部包含”选项卡未显示在上图中,但出现在 VS Community 2019 或更高版本中的“浏览信息”和“高级”选项卡之间。请参阅此链接,其中包含包含“外部包含”选项卡的对话框的最新照片。

对于 Code::Blocks 用户

“设置”菜单 >“编译器”>“编译器设置”选项卡,找到并检查与-Wall-Weffc++-Wextra相关的选项:

配置编译器:警告和错误级别

然后进入其他编译器选项选项卡,将-Wconversion -Wsign-conversion添加到以下文本编辑区域:

配置编译器:警告和错误级别

对于 GCC/G++ 用户

将以下标志添加到命令行中:-Wall -Weffc++ -Wextra -Wconversion -Wsign-conversion

对于 VS Code用户

打开tasks.json 文件,找到“args”,然后在该部分中找到“${file}”行。

在“${file}”行上方,添加包含以下命令的新行(每行一个):

“-Wall”,
“-Weffc++”,
“-Wextra”,
“-Wconversion”,
“-Wsign-conversion”,

将警告视为错误

还可以告诉编译器将所有警告视为错误(在这种情况下,如果编译器发现任何警告,它将停止编译)。这是执行建议的好方法,即您应该修复所有警告。

对于 Visual Studio 用户

要将警告视为错误,请在“解决方案资源管理器”窗口中右键单击您的项目名称,然后选择“属性”

配置编译器:警告和错误级别

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

然后选择“C/C++”>“常规”选项卡并将“将警告视为错误”设置为“是”(/WX)

配置编译器:警告和错误级别

对于 Code::Blocks 用户

“设置”菜单 >“编译器”>“其他编译器选项”选项卡,将-Werror添加到文本编辑区域:

配置编译器:警告和错误级别

对于 GCC/G++ 用户

将以下标志添加到命令行中:-Werror

对于 VS Code用户

tasks.json文件中,在“${file}”之前添加以下标志,每行一个:

"-Werror",

原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/cpp-compiler-warning-and-error-levels/

(0)
上一篇 2023年9月28日 下午10:42
下一篇 2023年9月28日 下午11:14

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注