我有以下情况 -
我需要用两个不同版本的GCC(3.2和4.4)编译我的代码,并希望看到所有警告并将它们视为错误(否则它是一个滑坡)。我必须包含我无法更改的头文件,包括一些代码。此代码使较新的GCC抛出警告(如未使用的参数)。
如果我添加类似
的内容#pragma GCC diagnostic ignored "-Wunused-parameter"
#include <bad_header.hpp>
#pragma GCC diagnostic error "-Wunused-parameter"
它解决了较新的GCC的问题,但旧版本不熟悉此编译指示并发出警告(这会成为错误)。
我该怎么办?
我不喜欢这两种解决方案,还有什么我可以做的吗?
根据Sander De Dycker的回答更新
我的构建系统不允许我在gcc
中使用-isystem标志答案 0 :(得分:5)
由于您只想抑制来自您无法控制的标题的警告,因此您可以使用-isystem
而不是-I
将这些标题标记为系统标题,gcc将不再为它们生成警告(how gcc treats system headers)。
答案 1 :(得分:1)
我现在要使用的解决方案(直到我看到更好的解决方案)是用宏来包装GCC诊断编译指示以检查GCC版本,例如
#if (defined __GNUC__) && (__GNUC__ > 3)
#pragma GCC diagnostic ignored "-Wunused-parameter"
#endif
#include <bad_header.hpp>
#if (defined __GNUC__) && (__GNUC__ > 3)
#pragma GCC diagnostic error "-Wunused-parameter"
#endif