Вернуть разные типы данных в функции C - PullRequest
1 голос
/ 14 января 2012

У меня следующая ситуация:

void func ()
{
    TEST_MACRO(....., ret_type)
    ..........
}

some_ptr* func2()
{
    TEST_MACRO(....., ret_type)
    ..........
}

int func3()
{
    TEST_MACRO(....., ret_type)
    ..........
}

У меня 3 типа функций.В каждой функции я должен выполнить проверку диапазона для одной и той же переменной (локальной переменной).

В зависимости от УСПЕХА / ОТКАЗА, я должен выполнить обработку ошибок в макросе:

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 Ответ

2 голосов
/ 14 января 2012

Макросы управления потоком, как известно, злые.Вместо этого заставьте ваш макрос выдавать логическое значение и отвечайте на него в вашей функции.Это гораздо понятнее:

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

int func ()
{
    if(!TEST_MACRO(.....))
         return FAILURE;
    .......... 
} 
...