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

Posted

技术标签:

【中文标题】在 C 函数中返回不同的数据类型【英文标题】:Return Different Data Types in C Function 【发布时间】:2012-01-14 04:12:30 【问题描述】:

我有以下情况:

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】:

流量控制宏是出了名的邪恶。而是让你的宏产生一个布尔值,并在你的函数中响应它。这样更清楚:

void func ()

    if(!TEST_MACRO(.....))
         return;
    .......... 
 

int func ()

    if(!TEST_MACRO(.....))
         return FAILURE;
    .......... 
 

【讨论】:

比我的答案好得多,但我会在这个答案上添加类型特定宏的使用。 没办法。在这种特殊情况下,特定于类型的宏(C11 尚未得到广泛支持)只会助长糟糕的设计。 谢谢你,我已经纠正了。我已经好几年没用过 C 了,所以我的 cmets 并不是基于当前的想法。

以上是关于在 C 函数中返回不同的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

C# - 在函数中返回混合类型

C语言中函数可以返回哪些类型的数据?(求详解)

C语言函数怎么像python那样返回多个值?(三种方法:1设置全局变量 2传递指针 3使用结构体返回不同类型的数据)

C语言自定义数据类型

如何存储多个数据类型的数组

覆盖虚函数返回类型不同且在数据结构中不是协变的