나는 다음과 같은 코드가 정상적인 생각 (와의 malloc/무료 비슷) :malloc/free fopen/fclose가 일치하는지 확인하는 방법은 무엇입니까?
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)
을 작성해야한다는 번거 로움이 있습니다. 하나의 해결책은 하나의 함수에 대해 단 하나의 반환입니다. 그러나 여러 차례의 수익이 유용 할 때도 있습니다. 다른 해결책이 있습니까?
추신 : 나는 알고 있듯이, lisp에 매크로 (with-open-file)가 있습니다.
(with-open-file (stream-var open-argument*)
body-form*)
파일을 열거 나 닫을 수 있습니다.
는
함수가 매우 큰 경우'goto'를 사용하는 것이 더 좋을 것이라고 생각합니다. – lisper
나는 함수를 매우 크게 만드는 것이 낫다고 생각한다. –
@Bo Persson : 참으로. 실용적인 기능보다 작은 기능을 유지하는 것이 실제로 도움이됩니다. –