【发布时间】:2020-06-29 16:10:33
【问题描述】:
我有以下 C 伪代码:
int main()
{
int rc = 0;
for (int i = 1; i < 10; i++) {
char *data = malloc(i); // Each iteration has a different alloc size
rc = do_something(data);
if (rc != 0) goto cleanup;
rc = do_something_else();
if (rc != 0) goto cleanup;
cleanup:
free(data);
if (rc != 0) break;
}
return rc;
}
如果被调用的函数返回错误,我想模拟 Python 的 try...finally 模式,但前提是必须进行一些必要的清理工作。
到目前为止,代码对我来说看起来不错,但我是 C 新手。是否有不同的模式可以避免 free 之后重复的 rc != 0 测试? (我知道有些人认为goto 无条件错误,但我认为这是我为这种情况找到的最干净的解决方案。)
【问题讨论】:
-
您可以将
rc != 0添加到for循环中:for (int i = 0; i < 10 && rc != 0; i++)...只需初始化rc=1;而不是0。在这种情况下,您将不需要break跨度> -
@AlexLop。不错!
标签: c loops error-handling goto