Kir*_*ill 2 c macros c-preprocessor
我有一个C函数,该函数调用其他函数,每个函数返回int,0如果!= 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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我有很多样板代码:
err = some_func();
if (err != 0) {
return err;
}
Run Code Online (Sandbox Code Playgroud)
是否可以编写一些宏来简化它?就像是:
#define TRY() ???
int myfunc()
{
TRY(func1(arg1));
TRY(func2(arg2, arg3));
TRY(func3(arg4, arg5));
TRY(func4());
}
Run Code Online (Sandbox Code Playgroud)
#define TRY(expression) \
do { \
int err = (expression); \
if (err != 0) { \
return err; \
} \
} while (0)
Run Code Online (Sandbox Code Playgroud)
这使err作用域仅限于宏。如果每个变量名位于单独的大括号块中,则每次使用相同的变量名是合法的。
您仍然需要return 0底部。
int myfunc()
{
TRY(func1(arg1));
TRY(func2(arg2, arg3));
TRY(func3(arg4, arg5));
TRY(func4());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
也可以看看: