这个宏存在问题 - 检查状态,如果失败则返回

时间:2011-01-06 13:03:41

标签: c++ macros error-handling

我们在代码中有一个频繁重复的行,用于检查函数的返回状态,如果是失败,则立即返回状态。我想为此定义一个宏:

#define RETURN_IF_FAILED(x) { int stat = (x); if (FAILED(stat)) return stat; }

局部变量是因为参数x可以是函数调用。

我知道有一些奇怪的使用宏的工件,我不是很精通它们,我想问你是否看到这个宏有任何问题。感谢。

(并且,请不要建议使用例外 - 我自己讨厌这种风格,但这就是它在这里完成的方式)

1 个答案:

答案 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
}

使用您的版本,根本不可能使用此代码。宏之后的;会导致您的版本出现问题!