首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Suppress -Wtautological比较警告

Suppress -Wtautological比较警告
EN

Stack Overflow用户
提问于 2013-04-08 00:03:21
回答 2查看 5.5K关注 0票数 6

我有一些代码,比如

代码语言:javascript
复制
Q_ASSERT(value_which_is_always_smaller_than_4 < 4)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-08 00:27:29

您可以定义一个新宏来包装Q_ASSERT,并使用#pragma clang diagnostic ignored自动使警告静默

代码语言:javascript
复制
#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)

现在只是在做

代码语言:javascript
复制
MY_ASSERT(3<4)

不应产生警告。

票数 12
EN

Stack Overflow用户

发布于 2013-04-08 00:21:43

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

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

代码语言:javascript
复制
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-compare"

Q_ASSERT(value_which_is_always_smaller_than_4 < 4)

#pragma clang diagnostic pop
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15864461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档