VC++のループ制御変数の再定義について

[戻る]
ロングトレイン 2003/02/04(火) 19:24:43
関数内でのループ制御用の変数に関する質問です。
VC++で関数内で以下のようなコードを記述した場合、コンパイルエラーとなってしまいます。

void main()
{
    //1回目のループ
    for (int i = 0; i < 10; i++)
    {
        cout << i << endl;
    }

    //2回目のループ
    for (int i = 0; i < 10; i++)
    {
        cout << i << endl;
    }
}

"error C2374: 'i' : 再定義されています。2 回以上初期化されています。"
というエラーが発生します。

コーディング規約上、ループ制御用変数 i を関数の先頭で宣言するという対応は出来ません。
また、2回目以降の制御用変数を別名にするという対応もあるのですが、ネストする場合以外は使用しないようにしています。
※実環境では別コンパイラを使用するので、上記のエラーは発生しません。

現在は、以下のようなマクロ定義をすることで一時的に対応しております。
#define for if(0);else for

できれば、ソースコード上に記述しない形で対応したいと考えています。
ご存知の方、ご教授よろしくお願い致します。

暇人貴子 2003/02/04(火) 19:55:36
void main(void)
{
  {
    for (int i = 0; i < 10; i++)
    {
      cout << i << endl;
    }
  }
    //2回目のループ
  {
    for (int i = 0; i < 10; i++)
    {
      cout << i << endl;
    }
  }
}
じゃだめですよね・・・

PAI 2003/02/04(火) 20:13:47
#ifdef _MSC_VER
  #if _MSC_VER <= 1200
    #define for if(0);else for
  #endif
#endif

それか、VC7(.Net)をつかうか。

渋木宏明(ひどり) [E-Mail] [HomePage] 2003/02/04(火) 21:21:04
ANSI 互換スイッチを有効にするとか。

ks' 2003/02/05(水) 19:34:11
これではダメなのかな?

void main(){

  // 1回目
  for(int i = 0; i < 10; i++){
     cout << i << endl;
  }

  // 2回目
  for(i = 0; i < 10; i++){
     cout << i << endl;
  }
}

YuO [E-Mail] 2003/02/05(水) 22:45:46
コンパイラオプション/Dを使って
/Dfor="if (false) ; else for"
としてやるとか。


> これではダメなのかな?

たぶん,
> ※実環境では別コンパイラを使用するので、上記のエラーは発生しません。
とあるのでダメなのでしょう。

ロングトレイン 2003/02/05(水) 22:57:00
皆様ありがとうございます。解決することが出来ました。
今後ともよろしくお願い致します。

ロングトレイン 2003/02/05(水) 22:57:49
[[解決]]
すみません。解決時チェックを入れ忘れました。。。

渋木宏明(ひどり) [E-Mail] [HomePage] 2003/02/05(水) 23:20:29
差し支えなければ、「どう解決したか」の報告をお願いします。

ロングトレイン 2003/02/05(水) 23:51:50
YuOさんの
>コンパイラオプション/Dを使って
>/Dfor="if (false) ; else for"
>としてやるとか。

の方法で解決させていただきました。

古いスレッドには追加発言できません。