【发布时间】:2017-04-22 04:05:31
【问题描述】:
说,我有这样的代码:
int foo() {
...
int buff_size;
scanf("%d", &buff_size);
FILE * fp = fopen("./file", "a+");
char *buff = malloc(buff_size*sizeof(char));
char *buff2 = malloc(buff_size*sizeof(char));
char *buff3 = malloc(buff_size*sizeof(char));
while (!feof(fp)) {
/*do something, say read, write etc.*/
if (/*error case 1*/) {
free(buff);
free(buff1);
free(buff3);
fclose(fp);
return -1;
}
else if (/*error case 2*/) {
free(buff);
free(buff1);
free(buff3);
fclose(fp);
return -2;
}
...
else if (/*error case k*/) {
free(buff);
free(buff1);
free(buff3);
fclose(fp);
return -k;
}
}
...
free(buff);
free(buff1);
free(buff2);
fclose(fp);
return 0;
}
对于 C 不提供 try...throw...finally 语法,我必须关闭文件描述符并释放我在返回错误整数代码之前创建的堆内存指针。它会产生一些重复的代码,使代码变得丑陋。
有人知道我应该如何修改这种代码以使其看起来更简洁吗?
【问题讨论】:
-
如果你总是分配相同的固定大小,为什么不使用数组呢?另请阅读Why is “while ( !feof (file) )” always wrong?
-
你为什么把它标记为 C++?
-
sizeof(char)总是 1. -
c++标签应该从问题中删除。因为,c++中的答案与c中的答案不同。 -
很好地讨论了 C 中的“try catch”:stackoverflow.com/questions/10586003/try-catch-statements-in-c
标签: c error-handling