C:返回错误的代码样式?

Mui*_*uis 0 c error-handling styles return-value

我的所有功能都是这样的:

short Function()
{
   short ret = 0;

   ret = FunctionA();   
   if(ret != 0) return ret;

   ret = FunctionB();
   if(ret != 0) return ret;

   ret = FunctionC();
   if(ret != 0) return ret;

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来写这个?无需重复

if(ret != 0) return ret;
Run Code Online (Sandbox Code Playgroud)

每时每刻?

Nik*_* B. 7

如果使用||其他答案中建议的短路不是一个选项,您可以为此定义一个宏:

#define TRY(var, x) if ((var = (x))) return var
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中:

short Function()
{
  short ret;

  TRY(ret, FunctionA());
  TRY(ret, FunctionB());
  TRY(ret, FunctionC());

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意:在决定使用宏时应该非常小心,但在这种情况下,我认为它可以是一种解决问题的简洁方法.但必须提到的是,这些陈述掩盖了这样一个事实,即函数可以在每个函数的早期返回.如果你有开放的资源句柄(文件描述符,指向malloced数据的指针......),它们就会泄漏.您和使用代码的每个人都应该意识到这一点,并使用适当的错误处理和清理例程来处理比这个更复杂的情况.

  • 然后把它交给n00b进行维护:( (2认同)

Tim*_*per 5

short Function()
{
   short ret = 0;

   if(
       (ret = FunctionA()) != 0 ||
       (ret = FunctionB()) != 0 ||
       (ret = FunctionC()) != 0
     )
   {
      return ret;
   }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • +1我正在为这一个投票 - 在宏中隐藏一个return语句和一个变量名(另一个答案)是我不想处理的代码. (2认同)