返回值在C中未定义

时间:2014-10-16 23:09:08

标签: c

不确定我是否为此过度思考,但如果参数不在需要的范围内,我将如何返回未定义的内容?

我正在尝试:

uint64_t function(uint64_t Value, uint64_t N) {
   uint64_t result = 0;

   if (N > 0){
     //do something;
     return result;
   }
   else{
     return result is undefined;
   }
}

如何返回N未定义?

3 个答案:

答案 0 :(得分:5)

一种解决方案是返回状态并使用OUT参数,如下所示:

bool function(uint64_t Value, uint64_t N, uint64_t *result) {

   if (N > 0){
     //do something;
     *result = 31337;
     return true;
   }
   else{
     return false;
   }
}

然后在调用此函数时,在使用结果之前检查函数是否返回true。

答案 1 :(得分:3)

对于整数类型,您不能

类型uint64_t正好有2个 64 可能的值,并且每个值都是有效的整数值。

在某些情况下,您可以选择一个可以作为错误指示处理的值(可能是UINT64_MIN)并返回 - 但这并不总是切实可行。

或者你可以让函数返回成功或失败的结果,并通过其他方式将uint64_t值传回给调用者,可能是通过调用者传入的指针存储它。

答案 2 :(得分:1)

另一个选择是返回一个结构。这在C ++中效果更好(看看Boost Optional),但这里是C版本:

#include <stdio.h>
#include <stdbool.h>

struct optional_int {
    bool valid;
    int  value;
};

struct optional_int f(int x)
{
    struct optional_int result = {false, 0};
    if(x > 0 && x < 10) {
        result.valid = true;
        result.value = x * 1024;
    }
    return result;
}

int main()
{
    struct optional_int v;

    v = f(9);
    if(v.valid) {
        printf("Result is %d\n", v.value);
    }
    return 0;
}