如果!= 0,则C宏返回函数结果

Kirill 2 c macros c-preprocessor

我有一个C函数,该函数调用其他函数,每个函数返回int0如果!= 0 ,则为OK或错误代码。该函数如下所示:

int myfunc()
{
  int err;
  err = func1(arg1);
  if (err != 0) {
    return err;
  }
  err = func2(arg2, arg3);
  if (err != 0) {
    return err;
  }
  err = func3(arg4, arg5);
  if (err != 0) {
    return err;
  }
  err = func4();
  if (err != 0) {
    return err;
  }
  return 0;
}

如您所见,我有很多样板代码:

err = some_func();
if (err != 0) {
  return err;
}

是否可以编写一些宏来简化它?就像是:

#define TRY() ???

int myfunc()
{
  TRY(func1(arg1));
  TRY(func2(arg2, arg3));
  TRY(func3(arg4, arg5));
  TRY(func4());
}

John Kugelma.. 6

#define TRY(expression)     \
  do {                      \
    int err = (expression); \
    if (err != 0) {         \
      return err;           \
    }                       \
  } while (0)

这使err作用域仅限于宏。如果每个变量名位于单独的大括号块中,则每次使用相同的变量名是合法的。

您仍然需要return 0底部。

int myfunc()
{
  TRY(func1(arg1));
  TRY(func2(arg2, arg3));
  TRY(func3(arg4, arg5));
  TRY(func4());
  return 0;
}

也可以看看: