不确定我是否为此过度思考,但如果参数不在需要的范围内,我将如何返回未定义的内容?
我正在尝试:
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未定义?
答案 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;
}