【发布时间】:2011-06-14 03:33:28
【问题描述】:
我觉得下面的代码是正常的(和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 中有其他返回语句,它会出现更多。但是,麻烦的是我要多次写fclose(fp)。一种解决方案是一种功能的一种回报。但是,多次返回有时很有用。还有其他解决办法吗?
PS:据我所知,lisp 中有一个宏(with-open-file)。
(with-open-file (stream-var open-argument*)
body-form*)
它可以为我们打开和关闭文件。
【问题讨论】: