【发布时间】:2012-11-02 20:58:25
【问题描述】:
我正在开发一个支持错误处理的宏。
#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语句后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 演员表并不理想。有什么建议吗?
【问题讨论】:
-
两个宏,
Check(e,call)现在是Try和#define Try(e,call) (void)Check(e,call)? -
@DanielFischer:如果我找不到其他解决方案,这确实是我的想法,但我更愿意用一个宏来解决这个问题。
-
恐怕没有骰子。您需要返回一个值以供
if使用,然后任何裸调用都将是未使用的值。
标签: c gcc gcc-warning