返回值在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。