http://www.slideshare.net/shinh/code-golf
やっべー。。すげー面白そう。。絶対できないけど。。
罰が当たっている。
というのも、かれこれプログラミングを始めてから9年がたとうというのに
・真面目にエラー処理を書いたことがない
・真面目に書いたプログラムのテストをしたことがない
・真面目に仕様書を書いたことがない
ため、この辺の経験不足がひじょーに痛いこの頃である。
そこでどうにかすべく、いろいろ考えてみる。
1. 資源の解放忘れ対策
これは、先輩から聞いたことなので、受け売り。
C言語では、関数の流れをぶち切ってreturnすることができる。たとえば、
file_aの内容をfile_bにコピーするみたいな、複数のファイルを開く処理だと
ついつい
int main(){
FILE *fp_a;
FILE *fp_b;
fp_a = fopen("file_a", "r");
if(fp_a == NULL){
return -1;
}
fp_b = fopen("file_b", "w");
if(fp_a == NULL){
return -2;
}
filecopy(fp_a, fp_b);
fclose(file_b);
fclose(file_a);
return 0;
}
みたいな書き方をするわけです。
これってまずいよねー。
file_bのopenミスったときにfile_a開きっぱなしで終了してるわけです。
なので、
int main(){
FILE *fp_a;
FILE *fp_b;
fp_a = fopen("file_a", "r");
if(fp_a == NULL){
goto end1;
}
fp_b = fopen("file_b", "w");
if(fp_a == NULL){
goto end2;
}
filecopy(fp_a, fp_b);
fclose(file_b);
end2:
fclose(file_a);
end1:
return 0;
}
こうしましょう。ってはなし。
なんか解放処理がひつようなことをするたびに endなんとかっていうラベルが増えると。
http://www.nurs.or.jp/~sug/soft/super/goto.htm
ここに詳しく。