在 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 函数中返回不同的数据类型的主要内容,如果未能解决你的问题,请参考以下文章