我正在开发一个支持错误处理的宏。
#define Try(e, call) ( (e == OK) && ((e = call) != OK) )
它可以用作 if 语句的表达式:
if (Try(err, SomeFunction(foo, bar))) {
// Entered only if err was OK before the if-statement and SomeFunction()
// returned a non-OK value.
}
err
如果在 if 语句之前已经不正常,则不会调用该函数。if-statement 之后err
会被设置为返回值SomeFunction()
。
到现在为止还挺好。但是我也想使用没有 if 语句的宏:
Try(err, SomeFunction(foo, bar));
在这种情况下,GCC 会给出以下警告:
warning: value computed is not used [-Wunused-value]
这就是我的问题所在:如何重写宏以使 GCC 不会产生此警告。我知道可以使用标志禁用警告(但我想为其他代码保持启用状态)或将结果显式转换为void
. 以下语句代码不会产生警告:
(void) Try(err, SomeFunction(foo, bar));
Try()
但是为每个前缀加上void
演员表远非理想。有什么建议么?