C函数的未知返回类型

时间:2010-08-05 17:51:58

标签: c function return-type

我正在为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 ): */

3 个答案:

答案 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>