もう一つ
goto なんだけど、やっぱり、使うべきではない?
でも、アセンブラを使っていると、普通に JMP とか書いている。
その感覚で考えちゃうと、goto も、うまく使えば、
ずっとシンプルに書ける場面も結構あるように思う。
実際、そういう主張も、いくらか見掛けたりする。
例えば、
if ((fp1=fopen(〜)) == NULL) { return -1; } if ((fp2=fopen(〜)) == NULL) { fclose(fp1); return -1; } if ((fp3=fopen(〜)) == NULL) { fclose(fp1); fclose(fp2); return -1; } // 何か処理 fclose(fp1); fclose(fp2); fclose(fp3); return 0;
みたいな場合。
int ret = -1; FILE * fp1 = NULL; FILE * fp2 = NULL; FILE * fp3 = NULL; if ((fp1 = fopen(〜)) == NULL) goto end; if ((fp2 = fopen(〜)) == NULL) goto end; if ((fp3 = fopen(〜)) == NULL) goto end; // 何か処理 ret = 0; end: if (fp1 != NULL) fclose(fp1); if (fp2 != NULL) fclose(fp2); if (fp3 != NULL) fclose(fp3); return ret;
とか書いちゃダメなのかな?