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