我可以安全地在 GCC 复合语句表达式中使用 return 吗?
例如,我定义宏
#define CHECK_FUNC_RESULT(func)
({
int result = func();
if (!result) return;
result;
})
并在代码中的某处以这样的方式使用它:
int function1()
{
if (some_condition)
return 0;
...
return 1;
}
void function2()
{
if(CHECK_FUNC_RESULT(function1)) {
... to do something
}
}
我可以期望从函数 2(在 some_condition == true 上)返回而没有任何未定义的行为吗?
它应该可以工作,但是只有当 function1 返回 1 时,才会处理您的 if() 语句(在您的示例中:从不)。这看起来像是一个危险的结构,因为其他永远不会被执行。
一种更简洁的方式来实现你想要的,你也可以将任意数量的参数传递给 func(在这个例子中是 3 个参数):
#define RET_IF_ZERO(func, args)
do {
int result = func args;
if (!result)
return;
} while (0)
用法示例:
void function1(int arg1, int arg2, int arg3)
{
if (some_condition)
return 0;
...
return 1;
}
void function2()
{
RET_IF_ZERO(function1, (arg1, arg2, arg3)));
... do to something
}