【发布时间】:2020-07-25 11:11:58
【问题描述】:
在专业从事 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;
}
但这并不安全(我们可以访问无效指针)。我怎样才能得到类似于 Scala 或 Rust 处理 C 中错误的方式?
编辑:更正 UserResult 字段名称“值”
【问题讨论】:
标签: c scala error-handling rust