2006/07/22
Cの哀しいバグ
次のコード(関数名や変数名のいい加減さは無視してください)をgccの-Wall付きでコンパイルすると、警告が出ます。
foo.c: int func(int a) { int a = 1; return a; } $ gcc -Wall -c foo.c foo.c: In function `func': foo.c:3: warning: declaration of `a' shadows a parameter
引数の変数名とローカル変数の変数名が重なっているので、引数の変数aが(おそらく意図に反して)無効になっている警告です。 個人的には、Javaのようにコンパイルエラーにしてもらってもいいと思っています。
しかし、次のコードの場合、警告がでません。
int func(int a) { { int a = 1; return a; } }
こんなバカなコードを書くことは無いだろうと思うかもしれませんが、書いてしまいました...。当然、意図とは異なるのでバグです(幸いにもテストで問題が見つかったので、リリースしたAirOneには含まれていません)。 gccは引数とローカル変数の名前が衝突すれば教えてくれる、と過信があったので、引数の名前に注意を払っていませんでした。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/pitiful-bug/tbping