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