我在专业使用Scala和Python一段时间后,又开始写C语言。 在使用Scala的“Option”和“Either”错误处理模式以及最近尝试Rust后,我希望在C中实现类似的功能。因此,我想到了以下代码:
typedef struct {
int age;
char* name;
} User;
typedef struct {
char* error;
User* value;
} UserResult;
UserResult get_user() {
/* Some complicated user fetching process .. that fails */
return (UserResult) { .error = "403 Unauthorized\n" };
}
int main(void) {
UserResult res = get_user();
if (res.error)
handle_error(res.error);
if (res.value)
do_something(res.value);
/* ... */
return 0;
}
但这并不是完全安全的(我们可能会访问无效指针)。我如何在C语言中实现类似于Scala或Rust处理错误的方式?
编辑:更正了UserResult字段名称“value”。