抑制 - 重新比较警告

时间:2013-04-07 16:03:21

标签: c++ clang

我有一些像

这样的代码
Q_ASSERT(value_which_is_always_smaller_than_4 < 4)

其中Q_ASSERT是Qts断言宏。现在铿锵,看到这个警告我,因为比较总是如此。很好,它可以检测到这一点,但这是断言声明的重点。我可以以某种方式抑制警告,但仅限于断言语句?我仍然喜欢在其他地方受到警告。

2 个答案:

答案 0 :(得分:10)

您可以定义一个新的宏来包裹Q_ASSERT并使用#pragma clang diagnostic ignored自动使警告静音:

#define STR(x) #x
#define PRAGMA(x) _Pragma(STR(x))
#define MY_ASSERT(x) PRAGMA(clang diagnostic push) \
PRAGMA(clang diagnostic ignored "-Wtautological-compare") \
Q_ASSERT(x) \
PRAGMA(clang diagnostic pop)

现在正在做

MY_ASSERT(3<4)

不应该发出警告。

答案 1 :(得分:2)

您可以通过将-Wno-tautological-compare添加到Clang命令行(在启用警告的-Wall标记之后)为整个文件禁用它。此方法的缺点是现在在该转换单元中的所有位置都禁用了警告,而不仅仅是Q_ASSERT(...)宏实例。

另一个更繁琐但细粒度的方法是使用以下内容包装生成此警告的宏的每个实例:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-compare"

Q_ASSERT(value_which_is_always_smaller_than_4 < 4)

#pragma clang diagnostic pop