http://onjn.nomaki.jp/の2005.11.14の日記より

VC6と2005では、forの初期化式で宣言した変数のスコープが異なります。

たぶん、2005が正しいのだと思う。

for(int i = 0; i < 10; i++) {

printf("%d\n", i);

}

printf("%d\n", i);

これは6ではコンパイル通りますが、2005ではi が宣言されていないということで最後の行がエラーになります。

ふむふむ。というわけで早速手元のVC++ 2003 Tookit + Platform SDKな環境でやってみた。

ら、

0

1

2

3

4

5

6

7

8

9

10

う、うごくのね、、

気持ち的には動かないでほしい。ので2005での変更は素敵。ELFたんの話しによるとANSI-C++的にも通らない方が正しいとか。

3 thoughts on “forの初期化時に宣言した変数のスコープの解釈の違いについて

  1. Gimite より:

    はじめまして。
    VC2003でも、プロジェクトのプロパティの C/C++→言語→forループスコープの強制準拠 で切りかえれるようです。

  2. halt より:

    はじめまして。
    指摘ありがとうございます。
    設定で回避できるとはしりませんでした。
    cl /?|more
    で見てみると
    /Zc:forScope
    で挙動を変えることができるみたいですね。

  3. for文初期化時変数のスコープの話。C++の仕様かと思ってたけど、VCの仕様だったのね・・・ http://t.co/KDyGZelr

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ねこ認証:9つのパネルの中からねこを3匹選んでください