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;
}