【问题标题】:How to suppress specific warnings in g++如何抑制 g++ 中的特定警告
【发布时间】:2010-10-03 23:30:59
【问题描述】:

我想禁止来自 g++ 的特定警告。我知道-Wno-XXX 标志,但我正在寻找更具体的东西。我想要-Weffc++ 中的一些 警告,但不是全部。类似于您可以使用 lint 执行的操作 - 禁用特定消息。

gcc 中是否有内置方法可以做到这一点?我必须编写包装脚本吗?

【问题讨论】:

  • 如果您想禁用n 代码行的警告,请参阅this answer
  • 如果您想将其添加到源代码文件中,您可以按照此处所述(也可能在其他答案中)执行以下操作:codeyarns.com/2014/03/11/…

标签: c++ gcc g++


【解决方案1】:

很遗憾,g++ 不提供此功能。 在 VC++ 中,您可以使用#pragma warning 禁用某些特定警告。在 gcc 中,您可以拥有的最接近的是 diagnostic pragmas,它允许您为某些文件或项目启用/禁用某些类型的诊断。

编辑:GCC 从 4.6.4 开始支持推送/弹出警告(请参阅 changelog

【讨论】:

  • 这是不正确的,您可以通过推送/弹出状态,然后在该推送/弹出区域内调整诊断,在一行代码附近使用诊断编译指示。
  • @AlexisWilke 确实,这是在我回答几年后添加到 gcc 中的,让我更新一下!
【解决方案2】:

对于某些警告,有一个命令行开关可以禁用它们。要知道使用哪个开关,请将-fdiagnostics-show-option 传递给 gcc。

【讨论】:

  • 获取警告名称的命令行选项很有用。
【解决方案3】:

将标准错误传递给过滤器,以删除您不想看到的内容。例如,这是我的 make 文件:

main.o:  main.cpp
    g++ -c -Wall main.cpp 2>&1 | grep -v Wunused-variable

【讨论】:

  • 它似乎更复杂,因为警告可能适合多行(例如,当它包含代码 sn-ps 时)。
  • 另外,如果你使用-Werror,隐藏警告就没那么有用了(更不用说,它对你一点帮助也没有)。
【解决方案4】:

您可以在输出中使用 grep -v

根据您希望禁用的警告,您有时可以在代码中进行更正。例如:

int main()
{
  int i;
}

生成: foo.cc:4:警告:未使用的变量“i”

而这不是:

#define MARKUSED(X)  ((void)(&(X)))

int main()
{
  int i;
  MARKUSED(i);
}

【讨论】:

  • GCC 也有关键字 extension 希望将抑制来自下一条语句的警告。
  • @GiladNaor 包围一段代码,例如#pragma GCC diagnostic ignored "-Wfloat-equal"#pragma GCC diagnostic pop
  • 该操作要求通用解决方案,不限于此未使用的变量警告。
猜你喜欢
  • 2014-08-19
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2013-05-20
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多