暂时禁用特定版本GCC的警告

时间:2013-12-05 14:40:54

标签: c++ gcc gcc-warning

我有以下情况 -

我需要用两个不同版本的GCC(3.2和4.4)编译我的代码,并希望看到所有警告并将它们视为错误(否则它是一个滑坡)。我必须包含我无法更改的头文件,包括一些代码。此代码使较新的GCC抛出警告(如未使用的参数)。

如果我添加类似

的内容
#pragma GCC diagnostic ignored "-Wunused-parameter"
#include <bad_header.hpp>
#pragma GCC diagnostic error "-Wunused-parameter"

它解决了较新的GCC的问题,但旧版本不熟悉此编译指示并发出警告(这会成为错误)。

我该怎么办?

  1. 停止将警告视为错误
  2. 使用某种版本检查宏
  3. 包围我的pragma

    我不喜欢这两种解决方案,还有什么我可以做的吗?

    根据Sander De Dycker的回答更新

    我的构建系统不允许我在gcc

    中使用-isystem标志

2 个答案:

答案 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