環境は VC++ 6.0 WinXP です
MFC Wizard でダイアログのスケルトンをつくり
OKボタンのもとに
void CDtestDlg::OnOK()
{
int total = 0;
for(int i=0;i<10;i++){total += i;}
i=3;
}
をつくってコンパイルすると通ってしまうのですが
そうではなくて
変数 i の有効範囲がfor文に納まるようにする
なにか方法がありましたら
お教え願えませんでしょうか
スコープの話でしょうか
int total = 0;
{
for(int i=0;i<10;i++){total += i;}
}
i=3;
これならエラーになります。
> 変数 i の有効範囲がfor文に納まるようにする
のが何より優先されるのであれば
・VC++6 を捨てて VS2003/2005/Orcas に移行する
・オプション -Za をつけて MFC を捨てる
あたりが選択肢になる
そもそもサポートなどとっくになくなっている VC++6 を使っていることが間違いだと思
わないか?
VC++6 を使い続けるのが優先されるのであれば
・そんな瑣末なところは無視する
という選択肢もあり
小細工で済ませるなら
#define for if (0) {} else for
というのが常套手段だけど影響範囲がでかすぎる可能性があってオススメしないかな。
stdafx.h 中にこれを書くのは危険すぎるしな。
もともと、VC++6.0のコンパイラは古いので規格に対する準拠率も
最新のコンパイラに比べて低いですし、新しく追加された部分なんかは
対応されているはずも有りません。
というわけで、VC++6.0を使い続けなくてはならないわけがあるのであれば、
その辺は目をつぶるのが得策でしょうね。
実際の話、このスコープの話はあまりインパクトがある内容だとは思えませんし。
最新の環境を使う事が可能ならそっちを使った方が幸せになれます。
C++だけの話ならExpressEdtionを使えば、最新のコンパイラがただで手に入りますし。
どうしてそこにこだわるのかも書いた方が適切なアドバイスがもらえるかもしれません。
いろいろありがとうございました