■C言語のアンチパターン/可変定数テーブルの作り方
ある日、デバッグ用プリント文をコメントアウトしていた時のお話。
不要なプリント文をコメントアウトしました。
■変更前
printf( "start\n" );
for( int i; i<10; i++)
printf( "cnt[%d] ", i );
printf( "end\n" );
func( );
■変更後
//printf( "start\n" );
//for( int i; i<10; i++)
// printf( "cnt[%d] ", i );
//printf( "end\n" );
func( );
で。
数日後、上記コードに修正が加えられていました。
この変更で、バグが発生したのです!!
■変更前
//printf( "start\n" );
//for( int i; i<10; i++)
// printf( "cnt[%d] ", i );
//printf( "end\n" );
func( );
■変更後
//printf( "start\n" );
for( int i; i<10; i++)
// printf( "cnt[%d] ", i );
//printf( "end\n" );
func( );
答え:「func( ) が10回コールされてしまう」
最初、理由が分からなくて、1時間近く悩んでしまった。
いくらデバッグ用プログラムだからって、せめて { } はつけましょう!と言いたい。
子一時間くらい説教したい。
せめてこうやって書いてくれれば、バグは未然に防げたはずなのに……。
printf( "start\n" );
for( int i; i<10; i++) {
printf( "cnt[%d] ", i );
}
printf( "end\n" );
func( );
なんか、C言語の初歩のミスをしている様な気がする……。
0 件のコメント:
コメントを投稿