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