【问题标题】:Compiler warnings in others' libraries其他库中的编译器警告
【发布时间】:2009-07-22 15:30:45
【问题描述】:

我将我的 C++ 代码链接到几个库(其中一些库非常基于标头),其中一些库有一段时间没有更新。我在 GCC 4.0 上使用 -WallWextra 编译我的代码已经有一段时间了,没有任何警告或错误。但是,现在我使用的是较新版本的 GCC (4.3),我的许多文件都在打印来自其他库的包含文件的警告(例如,当库的模板化代码使用 restrict 关键字时,warning: type qualifiers ignored on function return type在返回的指针上)。同样,当我使用 GCC 4.1 编译时,我正在使用的集群上的一个稍旧版本的 OpenMPI 会打印出许多警告。

问题是:当离开本地目录读取头文件时,我可以做任何事情来禁用其他人代码中的警告只是吗?我想让我的代码尽可能干净和正确(因此,我启用了所有警告),但是如果我的 make 过程被我无法修复的问题弄得一团糟,那么这个目的就会失败。我是否只需要全局禁用代码中出现的特定警告?

【问题讨论】:

    标签: c++ gcc warnings


    【解决方案1】:

    想到的一件事是在命名包含目录时使用-isystem 而不是-I。这会将其视为系统标头,这意味着 gcc 不会对其中的内容显示任何警告。

    不过,我不确定 gcc 是否会开始给他们一些其他治疗。为了安全起见,请先查看 gcc 文档。

    【讨论】:

    • 我不相信 -isystem 会改变其他任何东西。这是我的方法,而且效果很好。唯一的问题是,你自己的代码(头定义宏的地方)中的宏扩展可能仍然存在错误。
    【解决方案2】:

    查看类似问题的答案:

    Conditionally disable warnings with qmake/gcc?

    我的建议是通过您自己的包装标头间接包含第 3 方标头,并在这些标头中使用编译指示关闭警告,然后在第 3 方标头的#includes 之后再次打开。

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多