Ake*_*eel 6 c readability code-readability
考虑这个功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
这个函数的实际工作只需要3行(声明数字变量,调用get_number(),然后调用calculate_result()).但是,错误检查/处理代码会将此功能扩展为17行(给定或接受,具体取决于您对行的计算方式).
在更大规模,多次调用和多次错误检查时,我们完全膨胀该函数并使其难以理解且难以理解.
有什么方法可以解决C代码膨胀问题并保持函数核心操作的可读性(不牺牲基本的错误处理代码)?
小智 0
这是异常的主要原因,但我必须承认我不喜欢在使用显式内存管理的语言中引入异常,因此这个答案可能有偏见。也就是说,有一些常见的策略可以将c中的业务逻辑与错误处理分开。
longjmp()/在csetjmp()中自己实现它们。我建议不要这么做。goto。(对真的!)要检查返回值并将消息打印到stderr,请尝试排除常见情况并定义宏,例如在您的情况下:
#define CHECK_RETVAL(val, action) do { \
if (val < 0) { \
fprintf(stderr, "error calling " action ": %s\n", strerror((val))); \
goto error_cleanup; \
}} while (0)
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |