我们在代码中有一个频繁重复的行,用于检查函数的返回状态,如果是失败,则立即返回状态。我想为此定义一个宏:
#define RETURN_IF_FAILED(x) { int stat = (x); if (FAILED(stat)) return stat; }
局部变量是因为参数x
可以是函数调用。
我知道有一些奇怪的使用宏的工件,我不是很精通它们,我想问你是否看到这个宏有任何问题。感谢。
(并且,请不要建议使用例外 - 我自己讨厌这种风格,但这就是它在这里完成的方式)
答案 0 :(得分:7)
我想稍微修改一下;用do{} while(0)
这样封闭它:
#define RETURN_IF_FAILED(x) do { int stat = (x); if (FAILED(stat)) return stat; } while(0)
现在您可以使用此MACRO,如下所示:
if (SomeCondition)
RETURN_IF_FAILED(x); //<--- note the "usual" semicolon!
else
{
//some code
}
使用您的版本,根本不可能使用此代码。宏之后的;
会导致您的版本出现问题!