我有一些代码,比如
Q_ASSERT(value_which_is_always_smaller_than_4 < 4)其中Q_ASSERT是Qts断言宏。现在当我看到这个的时候会发出警告,因为这种比较总是正确的。很高兴它能检测到这一点,但这就是assert语句的意义所在。我能以某种方式抑制警告,但只能在assert语句中吗?我仍然希望在其他地方得到警告。
发布于 2013-04-08 00:27:29
您可以定义一个新宏来包装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-08 00:21:43
您可以通过在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 pophttps://stackoverflow.com/questions/15864461
复制相似问题