fcloseにNULLを渡せるか?
調べてみると少なくとも標準Cでは規定されていないみたい。fcloseにNULLを渡したときの動作についてはふれていないようだ。fopenに失敗するとNULLが返るので後始末は何でもfcloseと思っていたのだけどだめなのだな。freeに対してはNULL渡してOKなのに、、。
void func(void) { char *p = NULL; p = malloc(1024); if (p == NULL) { goto FINALLY; } /* 様々な処理 */ if (accident) { /* accident発生の時はとにかくFINALLY */ goto FINALLY; } FINALLY: free(p); }
というようなことをFILEポインタでもやりたかったのだがfopenに失敗したときだけreturnしなければならない。美しくなくていやだな。
void func(void) { FILE*fp = NULL; fp = fopen("hoge.txt", "r"); if (fp == NULL) { /*goto FINALLY;*/ return; } /* 様々な処理 */ if (accident) { /* accident発生の時はとにかくFINALLY */ goto FINALLY; } FINALLY: fclose(fp); }