【发布时间】:2021-05-16 09:15:42
【问题描述】:
在 Go 中,他们经常做整个 (err, val) 的事情,在 Rust 中他们做类似的事情(+ 语法糖)。
我不确定是否应该为我的每种类型使用这种类型的struct:
typedef struct {
int status;
char *const *c_str_arr;
size_t size;
} StatusAndArrayCStrArray;
extern void cleanup_struct_cstr_array(StatusAndArrayCStrArray *status_and_array) {
if (status_and_array->c_str_arr != NULL) {
free((void *) status_and_array->c_str_arr);
status_and_array->size = 0;
}
}
static const StatusAndArrayCStrArray statusAndArrayCStrArrayNull = {
EXIT_FAILURE, NULL, 0
};
这似乎浪费了很多空间。也许union 会更好? - 我也看到了一些perror 的东西,所以也许我打算设置一个错误代码并返回值,然后首先检查是否有错误,否则 perror 方式返回值?
【问题讨论】:
-
所以我计划从远程服务器返回几千个函数,每个函数返回值或错误。该值可以是标量、某个描述的数组(具有单独的大小字段),也可以是代表远程实体的
struct上的完整值。 -
不相关,但为了它的价值,无需将
free的参数或返回值转换为void *(malloc/calloc/realloc也是如此)。
标签: c error-handling optional error-code error-checking