素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

forのブレース

#include <stdio.h>

int main(int argc, int argv) {
    int i;
    for (i = 0; i < 10; ++i) {
        int i = i;
        printf("%d\n", i);
    }
    return 0;
}

% ./a.out
4096
4096
4096
4096
4096
4096
4096
4096
4096
4096
%

未定義値が表示されるみたい。無限ループにはならないのでブロックスコープ自体は存在してる。どのタイミングで変数が作られているんだろう。


トラックバックを見たら新しいスコープに入った時点で先に変数がスタックに積まれ、その後に式が解釈されて実際に代入されるらしいと分かった。一応、規格書を調べてみようと思ってGoogleで検索したけど、ANSI Cの規格がどこにあるか分からなかった。どこにあるんだろう。