繁体   English   中英

我可以编写一个可以在C中返回一种数据类型或另一种数据类型的函数吗?

[英]Can I write a function that can either return one data type or another in C?

如何制作返回零或数字数组的函数。 我的函数应该测试输入的字符串是否带有两个用空格分隔的十六进制数字的字符串,例如此字符串: "a48 2b4" 如果符合条件,则返回由两个数字组成的int数组;如果不符合要求,则返回0。例如,如果它具有非十六进制字符或太多空格,则返回0。

由于在任何情况下都无法直接返回数组,因此需要修改计划。 首先考虑一下,您描述的两种备选回报在很大程度上是不相关的-一种是数据,另一种是状态码。 它们不适合作为替代方案,这就是您苦苦挣扎的原因之一。

注释中建议的替代@ try-catch-final会遵循一个不错的,干净的设计:让调用者将数组(作为指针)传递给函数作为参数。 成功后,该函数将填充前两个元素(依赖于调用者提供了适合于此的指针)。 函数的实际返回值可以是状态码。 我猜想您的思考方式是:失败时为0,成功时为其他(1?),尽管这与大多数标准库函数的处理方式相反。

例:

int parseHex(const char *str, int *parsed_result) {
    // ...
    if (success) {
        parsed_result[0] = hex0;
        parsed_result[1] = hex1;
        return 1;
    } else {
        return 0;
    }
}

至少有两种其他方法可以解决此问题,但是这种方法是干净且一致的,不会使调用者承担释放动态分配的内存的任何新责任。

我也可以使用Union 联合可以存储两种或多种类型的值。

union OptionalInt {
    int Value;
    bool IsNull;
};

union OptionalInt ParseHex(char *Str) {
    //...
    if(/*Success*/) {
        return (union OptionalInt){/*Value*/, 0};
    }else{
        return (union OptionalInt){0, 1};
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM