Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回值在C中未定义_C - Fatal编程技术网

返回值在C中未定义

返回值在C中未定义,c,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?一种解决方案

不确定我是否考虑过度了,但是当参数不在需要的范围内时,如何返回未定义的内容

我正在努力做到:

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?

一种解决方案是返回状态并使用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。

对于整数类型,您不能

总共有264个类型为
uint64\u t
的可能值,每个值都是有效的整数值

在某些情况下,您可以选择一个值(可能是
UINT64_MIN
),将其视为错误指示,然后返回该值——但这并不总是可行的


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

另一个选项是返回结构。这在C++中更有效(看Boost可选),但是这里有一个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;
}
#包括
#包括
结构可选\u int{
布尔有效;
int值;
};
结构可选_int f(int x)
{
struct optional_int result={false,0};
如果(x>0&&x<10){
result.valid=true;
result.value=x*1024;
}
返回结果;
}
int main()
{
结构可选_int v;
v=f(9);
如果(v.valid){
printf(“结果是%d\n”,v.value);
}
返回0;
}

一个选项是:在您的情况下,它取决于函数可以返回的可能值的范围。如果您知道这个范围,那么您可以选择它之外的一个值作为未定义的值。一种可能性是像C库调用一样,设置errno=ERANGE。如果我这样做:…否则{return-1;}}}N必须大于0,否则函数应该返回未定义的值。@Tavo:如果您执行
return-1
在返回
uint64\u t
的函数中,
-1
将转换为
18446744073709551615
uint64\u t
没有未定义的值,除非您自己按照约定定义它。我不能将其更改为布尔值。它必须是uint64类型的函数_t@Tavo然后使用
uint64\t函数(…,bool*未定义)
prototype。