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

dav*_*vka 3 c++ error-handling macros

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

#define RETURN_IF_FAILED(x) { int stat = (x); if (FAILED(stat)) return stat; }
Run Code Online (Sandbox Code Playgroud)

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

我知道有一些奇怪的使用宏的工件,我不是很熟练,我想问你是否看到这个宏有任何问题.谢谢.

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

Naw*_*waz 7

我想稍微修改一下; do{} while(0)像这样用它封闭它:

#define RETURN_IF_FAILED(x) do { int stat = (x); if (FAILED(stat)) return stat; } while(0)
Run Code Online (Sandbox Code Playgroud)

现在您可以使用此MACRO,如下所示:

if (SomeCondition)
  RETURN_IF_FAILED(x); //<--- note the "usual" semicolon!
else
{
   //some code
}
Run Code Online (Sandbox Code Playgroud)

使用您的版本,此代码根本不可用.该;宏命令后会在你的版本引起的问题!