【发布时间】:2015-08-22 16:43:05
【问题描述】:
考虑这个函数:
int get_result(int *result) {
int err = 0;
int number = 0;
if (result == NULL) {
printf("error: null input\n");
return -1;
}
err = get_number(&number);
if (err != 0) {
printf("error calling get_number: err = %d\n", err);
return err;
}
err = calculate_result(number, result);
if (err != 0) {
printf("error calling get_result: err = %d\n", err);
return err;
}
return err;
}
这个函数的真正工作只需要3行(声明数字变量,调用get_number(),然后调用calculate_result())。但是,错误检查/处理代码将此函数膨胀到 17 行(取决于您如何计算行数)。
在更大的范围内,有很多调用和多次错误检查,我们使函数完全膨胀,使其不可读且难以理解。
有什么方法可以解决 C 代码中的这种臃肿问题并保持函数核心操作的可读性(不牺牲基本的错误处理代码)?
【问题讨论】:
-
为什么使用
errno作为类型名? -
好吧。如果您不打印到标准错误并剪断大括号,则可以节省 4-6 行。
c是这样的。实际上所有的语言都是这样的,你可以在java中争论你也可以扩展一个对try-catch块的简单调用。所以,你编写你需要的代码。 -
你可以,实际上使用宏可以节省一些工作,比如
#define SAFE_CALL(expr) { errno err = expr; if (err != 0) return err; }。如果您将代码中的此类使用限制在合理的范围内,这不会太糟糕。 -
@HuStmpHrrr:不符合 C 标准。只有 POSIX 标准(此处可能适用也可能不适用)。
-
如果代码有效,那么您可能会在 codereview.stackexchange.com 上得到更好的答案
标签: c readability code-readability