我正在为C编写一个库,一个函数可以返回一个字符串(char *
),一个整数或一个double。接下来,字符串的长度是未知的。我真的不知道如何处理这个问题。我想过使用指针作为函数的参数,但这真的很混乱。
任何人都可以给我一个解决方案,也许还有一些简短的示例代码?感谢。
如果将void指针作为返回类型,并将指向返回值大小的指针作为参数:
void* func(int x, int y, int *size) { ... }
/* or */
void* func(int x, int y, int &size) { ... }
/* always confused about them ): */
答案 0 :(得分:7)
这听起来真的很糟糕,但是如果你觉得你出于某种原因必须这样做,那么你可以使用一个联合来返回不同的类型。
答案 1 :(得分:7)
如果某个函数可以返回多个类型,我建议不要使用union(至少不是一个)。您的函数需要返回两条信息:结果和结果类型。使用像这样的结构可能会获得最大的收益:
enum return_val_type {STRING, INT, DOUBLE};
struct return_val {
enum return_val_type return_type;
union {
char* s;
int i;
double d;
};
};
这样,调用者可以检查return_type
的值并确定他们如何解释数据(即使用哪个union字段)。
答案 2 :(得分:0)
您将不得不重新设计您的功能,或者根据类型拥有多个版本。
想一想 - 编译器将如何处理它?假设实现是在一个单独的.c文件中,该函数是编译器的黑盒子,所以它不知道会发生什么。
你可以为每种类型使用一个版本的函数,或者返回一个指针,或者将一个指针作为一个参数并将值存储在那里(如果结果的大小未知,这可能是不安全的)。 p>