アカウント名:
パスワード:
for文の初期化項での変数スコープがfor文外でも有効だった件。
可搬性のために#define for if(0); else forとかやってたよね。
特殊というか、極めて一般的なVC6がそういう動きをしてませんでしたっけ。VC2005/2008はデフォルトでは言語仕様通りだけど、つじつま合わせのオプションがあったりします。
C++ の規約制定時にドラフト案のまま実装したものの、仕様が変わっちゃった上にリリースしちゃったために変えるに変えられずずっと維持されたパターンだったはず。
VC2003時代にどっかで読んだ話じゃ、「MFCがそれ(for文の外までスコープになる)前提で書かれており、 しかもそれがあちこちにあるから今のところデフォルトで規格に合わない動きにしている」とかなんとか。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー
特殊なC++コンパイラでの話だけど (スコア:2, 興味深い)
for文の初期化項での変数スコープがfor文外でも有効だった件。
可搬性のために
#define for if(0); else for
とかやってたよね。
Re: (スコア:1)
特殊というか、極めて一般的なVC6がそういう動きをしてませんでしたっけ。
VC2005/2008はデフォルトでは言語仕様通りだけど、つじつま合わせのオプションがあったりします。
Re:特殊なC++コンパイラでの話だけど (スコア:1)
C++ の規約制定時にドラフト案のまま実装したものの、仕様が変わっちゃった上にリリースしちゃったために変えるに変えられずずっと維持されたパターンだったはず。
Re:特殊なC++コンパイラでの話だけど (スコア:2)
VC2003時代にどっかで読んだ話じゃ、
「MFCがそれ(for文の外までスコープになる)前提で書かれており、
しかもそれがあちこちにあるから今のところデフォルトで規格に合わない動きにしている」
とかなんとか。
Re: (スコア:0)
VC7(2002)の時点でMFCはATLとマージされて全面的に手が入ったので、ついでに直せるでしょう。
デフォルトがVC6と同じ挙動になっている理由は、VC6のユーザが書いた既存のコードのため、でしょう。