0.11--配置编译器:警告和错误级别[译]

原文:0.11--配置编译器:警告和错误级别  作者:Alex

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

如果您所做的事情确实违反了语言规则,则编译器需要发出诊断消息(通常简称为诊断)。 C++ 标准没有定义诊断消息应如何分类或措辞。然而,编译器已经采用了一些常见的约定。

如果编译由于违规而无法继续,则编译器将发出错误,提供包含错误的行号以及有关预期内容和发现内容的一些文本。错误会阻止编译继续进行。实际的错误可能位于该行或前一行。识别并修复错误的代码行后,您可以尝试再次编译。

如果尽管发生违规,编译仍可以继续,则编译器可能会决定发出错误或警告。警告与错误类似,但它们不会停止编译。

在某些情况下,编译器可能会识别出不违反语言规则但它认为可能不正确的代码。在这种情况下,编译器可能会决定发出警告,以通知程序员某些地方似乎有问题。

最佳做法

不要让警告堆积如山。当你遇到它们时解决它们(把它们当作是错误一样)。否则,关于严重问题的警告可能会在关于非严重问题的警告中丢失。

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

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

提高警告级别

默认情况下,大多数编译器只会生成有关最明显问题的警告。但是,您可以要求编译器更加自信地为它认为奇怪的事情提供警告。

最佳做法

将警告级别调至最高,尤其是在学习时。它将尽可能帮助您识别出现的问题。

 

对于 Visual Studio 用户

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

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

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

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

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

  • 在“C/C++”>“命令行”选项卡的“附加选项”下,添加 /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",

 

posted on 2024-05-02 23:30  一只空气  阅读(187)  评论(0)    收藏  举报