34

我从 GCC 得到这个警告:

警告:不能通过 '...' 传递非 POD 类型 'class Something' 的对象;调用将在运行时中止

这是非常致命的,尤其是因为它调用了中止。为什么这不是错误?我想让它成为一个错误,但是:

  1. 如何使特定警告成为错误?
  2. 是哪个警告?根据3.8 Options to Request or Suppress Warnings-Wno-invalid-offsetof它看起来像是隐藏它的标志,但事实并非如此。
4

5 回答 5

29

我不确定正确的警告是什么,但是一旦找到它,您可以使用以下内容更改其配置(以“格式”为例):

#pragma GCC diagnostic error "-Wformat"

或者正如strager指出的那样

gcc -Werror=format ...

我已经为此检查了 gcc 源,并且无法通过命令行标志禁用此特定警告。

于 2009-01-24T03:13:59.180 回答
13

-Werror=specific-warning-Wspecific-warning在 GCC 4.3.x 或更高版本中将指定转换为错误。在 4.1.2 中,仅-Werror-implicit-function-declaration适用。请注意连字符而不是等号——它仅适用于特定情况,不适用于其他情况。这是更严重的常见警告之一,将其变为错误绝对很方便。

除此之外,旧版本的 GCC 似乎只提供了-Werror使每个最后一个警告都成为错误的大锤。

于 2009-06-26T01:56:12.490 回答
7

听起来还有很多其他警告,您不想变成错误(使用-Werror标志)。一般来说,修复所有警告是一种很好的做法。使用-Werror 会强制执行此操作。

于 2009-01-24T03:17:01.060 回答
5

您可以使用-Werror编译器标志将所有或部分警告转换为错误。

于 2009-01-24T03:15:47.507 回答
2

您可以使用-fdiagnostics-show-option查看适用于特定警告的 -W 选项。

不幸的是,在这种情况下,没有任何特定选项可以涵盖该警告。

看来 GCC 4.5 会对此提供更好的支持。

于 2009-12-16T13:51:35.547 回答