関数内でのループ制御用の変数に関する質問です。
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
できれば、ソースコード上に記述しない形で対応したいと考えています。
ご存知の方、ご教授よろしくお願い致します。
void main(void)
{
{
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
}
//2回目のループ
{
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
}
}
じゃだめですよね・・・
#ifdef _MSC_VER
#if _MSC_VER <= 1200
#define for if(0);else for
#endif
#endif
それか、VC7(.Net)をつかうか。
ANSI 互換スイッチを有効にするとか。
これではダメなのかな?
void main(){
// 1回目
for(int i = 0; i < 10; i++){
cout << i << endl;
}
// 2回目
for(i = 0; i < 10; i++){
cout << i << endl;
}
}
コンパイラオプション/Dを使って
/Dfor=if (false) ; else for
としてやるとか。
> これではダメなのかな?
たぶん,
> ※実環境では別コンパイラを使用するので、上記のエラーは発生しません。
とあるのでダメなのでしょう。
皆様ありがとうございます。解決することが出来ました。
今後ともよろしくお願い致します。
すみません。解決時チェックを入れ忘れました。。。
差し支えなければ、「どう解決したか」の報告をお願いします。
YuOさんの
>コンパイラオプション/Dを使って
>/Dfor=if (false) ; else for
>としてやるとか。
の方法で解決させていただきました。