我认为以下代码是正常的(与malloc / free相似):
int foo(){
FILE *fp = fopen("test.in", "r");
int i;
for(i = 0; i < NUM; i ++){
if(Match(fp, i)){
fclose(fp);
return i;
}
}
fclose(fp);
return 0;
}
我们可以看到
fclose(fp)
在代码中出现了两次。如果在foo函数中还有其他return语句,它将显示更多。但是,麻烦的是我必须多次编写fclose(fp)
。一种解决方案只是一种功能的一种回报。但是,多次返回有时很有用。还有其他解决方案吗?PS:据我所知,在Lisp中有一个宏(带有打开文件)。
(with-open-file (stream-var open-argument*)
body-form*)
它可以为我们打开和关闭文件。
最佳答案
在linux内核的源代码中,有许多函数必须在返回时处理锁和其他资源。而且,它们通常会在函数的末尾添加一个清理标签,并在每当发生早期返回时在其中添加goto
。我个人建议使用这种用法以避免重复的代码,也许这是goto
的唯一合理用法。
关于c - 如何确保malloc/free fopen/fclose匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6338787/