6

我有一些代码

Q_ASSERT(value_which_is_always_smaller_than_4 < 4)

其中 Q_ASSERT 是 Qts 断言宏。现在当当,当看到这个警告我时,因为比较总是正确的。很高兴它可以检测到这一点,但这就是 assert 语句的重点。我可以以某种方式抑制警告,但只能在断言语句中?我仍然希望在其他地方受到警告。

4

2 回答 2

12

您可以使用以下方法定义一个新宏来包装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)

不应产生警告。

于 2013-04-07T16:27:28.607 回答
5

您可以通过添加到 Clang 命令行来为整个文件禁用它-Wno-tautological-compare(在诸如-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
于 2013-04-07T16:21:42.650 回答