4

我使用 GCC 4.5.1 并收到如下警告:

警告:在“#pragma GCC 诊断”之后预期 [error|warning|ignored]

原因是“#pragma GCC 诊断推送”,它在 4.6 版之前的 GCC 中不存在。

我无法更改代码(这不是我的)和 GCC 版本。如何禁用这些警告?一些 GCC 标志可能是?

PS:我在 GCC/C++ 中看到为什么“pragma GCC diagnostic push”弹出警告?,但我的问题没有答案。

4

2 回答 2

8

GCC 有这两个标志来控制有关编译指示的警告:

-Wunknown-pragmas
当遇到 GCC 不理解的“#pragma”指令时发出警告。如果使用此命令行选项,甚至会针对系统头文件中的未知 pragma 发出警告。如果警告仅由-Wall命令行选项启用,则情况并非如此。

-Wno-pragmas
不警告错误使用pragma,例如不正确的参数、无效的语法或pragma 之间的冲突。另请参见 -Wunknown-pragmas

您可以使用 关闭它们-Wno-unknown-pragmas

于 2013-08-15T17:13:39.330 回答
0

这些似乎是您的选择:

  1. 使用-Wno-pragmas来抑制所有不正确的编译指示使用警告。我不相信忽略你感兴趣的编译指示是可能的。
  2. 忽略警告输出。编译器已警告您,所以它完成了它的工作。您知道警告发生的原因以及潜在案例是否无害。
  3. 仅使用 sed find/replace 删除有问题的 #pragmas 以用于您的副本。您可能可以将其合并到构建脚本中,并让它即时生成源文件的副本。您可能可以使用 sed 注释掉有问题的 #pragmas 并使用反向转换取消注释它(例如,在提交到共享存储库之前)。
  4. 在本地编译 GCC 4.6 并使用它。

3.8 Options to Request or Suppress Warnings有相关的警告信息。

于 2013-08-15T17:27:46.993 回答