【问题标题】:Automatically know if a GCC/Clang warning comes from Wall or Wextra?自动知道 GCC/Clang 警告是来自 Wall 还是 Wextra?
【发布时间】:2022-01-07 04:14:18
【问题描述】:

我想知道对于 GCC 和 Clang,是否有一些聪明的、自动的方法可以知道特定编译器警告(例如 -Wunused-parameter)是否来自组 -Wall-Wextra 或其他组。

用例:我们要启用:

-Wall -Wextra -pedantic

但是,某些pedantic 警告对我们不适用,我们希望禁用它们,例如:

-Wall -Wextra -pedantic -Wno-c++20-designator

现在,我们希望 100% 确定我们不会禁用来自 -Wall-Wextra 的任何内容。我们如何确保-Wc++20-designator 不是其中的一部分?当然可以去查看文档,但是当您有许多此类警告或升级编译器并收到新警告时,这是一个乏味的过程。

我们的用例确保所有-Wall-Wextra 警告始终处于活动状态,而不管来自-pedantic 的禁用警告。

谢谢!

【问题讨论】:

  • 请一题一题。 Automatically know if a GCC/Clang warning comes from Wall or Wextra? 不能替代 is there a way to ensure that all -Wall, -Wextra warnings will always be active, regardless of the disabled warnings?。第二个问题我也看不懂,是的,有办法,不要禁用任何警告。
  • “我们希望 100% 确定我们没有禁用 -Wall 或 -Wextra 的任何内容”。这听起来像是一个管理功能,我想知道为什么pedantic 不是最低要求。 gcc 文档中列出了在哪个状态下启用了哪个警告。但我相信它会不时改变,也许文档不会总是改变。我个人喜欢看到每一个警告并尽快修复。可以在此处看到由标志打开的警告:gcc.gnu.org/onlinedocs/gcc/Warning-Options.html。我们用所有警告编译我们的单元测试目标并计算它们。 >0 是错误的!
  • @KamilCuk 这不是问题的答案。克劳斯“哪一个是最小的”不在这个讨论范围内。我知道 GCC 链接,即使 Clang 没有等效的链接(您需要做更多的侦探工作)。我将在这方面更新问题。我的问题是这是否可以自动/以编程方式完成,而不是每次都手动进入文档。
  • 将问题更新为只有 1 个问题。
  • 你可以问gcc哪个选项启用了什么,试试gcc -Q -Wall --help=warnings | grep enabled。这对你有帮助吗?

标签: c++ gcc clang compiler-warnings suppress-warnings


【解决方案1】:

没有特定的命令可以直接回答“给定警告来自哪个警告组?”这个问题,但可以通过查询编译器启用了哪些警告并检查警告是否我们自动推断出此信息感兴趣的是启用警告列表的一部分。

按如下方式完成:

  • GCC:gcc -Q -Wall --help=warnings | grep enabled | grep unused-parameter(感谢@dratenik)。
  • Clang:与 GCC 不同,此功能未内置到编译器中,因此我们需要使用 diagtool 工具:diagtool show-enabled -Wall foo.cpp | grep unused-parameter

奖励: 与原始问题无关,但与原始用例有关:确保启用所有 WallWextra,无论禁用哪些警告,解决方案(仅适用于 Clang ) 就是把Wall Wextra 放在最后:

clang -Wno-unused-parameter -Wall -Wextra

在这种情况下,如果我们不小心禁用了unused-parameter 警告,之后将应用Wall,重新启用警告。

【讨论】:

    猜你喜欢
    • 2014-09-14
    • 2016-04-29
    • 2023-03-30
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多