在C函数中返回不同的数据类型

时间:2012-01-14 04:12:31

标签: c function user-defined-functions

我遇到以下情况:

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个不同的宏(每个返回类型一个)似乎不是一个干净的方式。

有人可以建议我处理这种情况的好方法吗?

1 个答案:

答案 0 :(得分:2)

流量控制宏众所周知的邪恶。而是让你的宏产生一个布尔值,并在你的函数内响应。这种方式更加清晰:

void func ()
{
    if(!TEST_MACRO(.....))
         return;
    .......... 
} 

int func ()
{
    if(!TEST_MACRO(.....))
         return FAILURE;
    .......... 
} 
相关问题