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