2009-07-22 66 views
4

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

问题是:当我离开本地目录读取头文件时,我可以做任何事情来禁止其他人的代码中的警告?我想让我的代码尽可能干净和正确(因此,我启用了所有警告),但是如果我的制作过程因无法修复的问题而混乱,目的就会失败。我是否必须全局禁用在代码中出现的特定警告?

回答

4

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

虽然我不确定gcc是否会开始给他们一些其他的待遇。首先检查gcc文档,以确保安全。

+0

我不相信 - 系统改变了其他的东西。这是我的方法,并且运作良好。唯一的问题是,由于您自己的代码中的宏扩展(头文件定义宏),可能仍然存在错误。 – 2009-08-25 15:50:37

3

看到答案,这样类似的问题:

Conditionally disable warnings with qmake/gcc?

我的建议是,通过自己的包装头部间接包括第三方头,并且在这些头切换警告了与编译指示,然后再打开再次包含第三方标题的#includes。

1

另一个类似的问题:在联交所描述 Is there a way to disable all warnings with a pragma?

我并不担心在第三方库中的任何警告,所以简单地忽略他们。因为所有包含都在预编译头文件中,所以工作得特别好。

编辑:哎呀,是#pragma警告只是VC++?

+0

是的,它只是vC++。海湾合作委员会似乎没有细粒度的警告控制。 – Eugene 2009-07-22 17:43:04