【发布时间】:2013-07-02 22:27:29
【问题描述】:
我有一个assert 宏,可以解析为if,如下所示:
#define assert(expr) \
if (!(expr)) \
{ \
handle_failed_assert(); \
}
忽略handle_failed_assert() 的工作原理,您无需引用do { ... } while(0) 技巧。请关注这背后的功能。
现在,真正的问题来了。有时我想强迫和断言,让它有意义。所以我们使用这个:
assert(!"Assert cause carefully described.");
问题是我们有这个基于 RVCT 2.2 的编译器 vrxcc,它在编译时会抛出以下警告:
#236-D: controlling expression is constant
当然,这会解析为编译常量if。
我怎样才能欺骗编译器接受它?
【问题讨论】:
-
我不知道这是否有助于警告,但我会使用
?:运算符而不是if语句,这样您就不必担心宏的扩展作为复合语句。它可以只是一个表达式。您也可以使用&&或||代替?:,这些可能会使警告静音。 -
我喜欢这样。像
if (expr && handle_failed_assert())这样的东西可能会起作用。我会尝试报告。
标签: c if-statement assert assertions constant-expression