Personal tools
You are here: Home ブログ 井上 Cの哀しいバグ
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

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は引数とローカル変数の名前が衝突すれば教えてくれる、と過信があったので、引数の名前に注意を払っていませんでした。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/pitiful-bug/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.