内容

更新日: 2005/11/10
バージョン: vc++6, vc++7

■ 概要
■ ソース

TOP

VC++でfor内で定義した変数のスコープが変(vc++)

概要

VC++8では直っているらしいが、6と7のVC++はfor内で定義した変数のスコープが 標準とは異なる。例えばVC++では

#include <iostream>

int main()
{
    for( int i = 0; i < 20; ++i );
    std::cout << i << std::endl;
    return 0;
}
というコードでもコンパイルが通ってしまう。これを防ぐためには先頭に
#define for if(0);else for
というマクロを入れて無理矢理スコープを指定するか、コンパイルオプションに6なら /Zaか 7なら /Zc:forScope をつける。

ソース

scope.cpp

#include <iostream>

#ifdef WIN32
#define for if(0);else for
#endif

int main()
{
    for( int i = 0; i < 20; ++i );
    std::cout << i << std::endl;
    return 0;
}