循环外变量的范围

Jad*_*ade 2 visual-c++

我正在尝试使用几年前编写的程序,并在之前版本的MS VC++中编译(我使用的是VC++ 2008).有很多(数百个)实例类似于以下内容:

int main () {
  int number = 0;
  int number2 = 0;

  for (int i = 0; i<10; i++) {
   //something using i
  }

  for (i=0; i<10; i++) {
   //something using i
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不确定它最初编译的是哪个版本,但它确实有效.我的问题是:它是如何工作的?我的理解是i变量应该只定义用于第一个循环.当我尝试编译它现在我得到错误"'我':未声明的标识符"为开始第二个循环的行,这是有道理的.在以前版本的VC++中,这只是被忽略了吗?谢谢!

pax*_*blo 5

早期版本的MSVC有这种"错误",因为它将这些变量泄露到封闭范围内.

换句话说,它处理了:

for (int i = 0; i<10; i++) {
    // something using i
}
Run Code Online (Sandbox Code Playgroud)

同样如下:

int i;
for (i = 0; i<10; i++) {
    // something using i
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此问题的答案我询问了一个奇怪的宏定义.