我遇到以下情况:
void func ()
{
TEST_MACRO(....., ret_type)
..........
}
some_ptr* func2()
{
TEST_MACRO(....., ret_type)
..........
}
int func3()
{
TEST_MACRO(....., ret_type)
..........
}
我有三种类型的功能。在每个函数中,我必须对同一个变量(局部变量)进行范围检查。
根据SUCCESS / FAILURE,我必须在宏中执行错误处理:
TEST_MACRO()
{
// FAILURE
if (ret_val == VOID_TYPE)
{
return;
}
else if (ret_val == RET_PTR)
{
return NULL;
}
else /* ret_val = INT */
{
return FAILURE;
}
}
但最终,所有预处理器代码都将进入同一个函数。
Problem:
int func3 ()
{
// Entire Error Handling
if (..)
return;
else if(..)
return NULL;
else
return FAILURE;
}
这是不可能的,但要实现相同的功能,即对SIMILAR局部变量进行范围检查,使用3个不同的宏(每个返回类型一个)似乎不是一个干净的方式。
有人可以建议我处理这种情况的好方法吗?
答案 0 :(得分:2)
流量控制宏众所周知的邪恶。而是让你的宏产生一个布尔值,并在你的函数内响应。这种方式更加清晰:
void func ()
{
if(!TEST_MACRO(.....))
return;
..........
}
int func ()
{
if(!TEST_MACRO(.....))
return FAILURE;
..........
}