我有一些代码
Q_ASSERT(value_which_is_always_smaller_than_4 < 4)
Run Code Online (Sandbox Code Playgroud)
其中Q_ASSERT是Qts断言宏.现在铿锵,看到这个警告我,因为比较总是如此.很好,它可以检测到这一点,但这是断言声明的重点.我可以以某种方式抑制警告,但仅限于断言语句?我仍然喜欢在其他地方受到警告.
nne*_*neo 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)
Run Code Online (Sandbox Code Playgroud)
现在就做
MY_ASSERT(3<4)
Run Code Online (Sandbox Code Playgroud)
不应该发出警告.
-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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3703 次 |
| 最近记录: |