visual-c++ - for循环外变量的作用域

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

我不确定它最初是在哪个版本中编译的,但它有效。我的问题是:它是如何运作的?我的理解是 i 变量应该只定义在第一个循环中使用。当我现在尝试编译它时,我在开始第二个循环的行中收到错误“'i':未声明的标识符”,这是有道理的。以前版本的 VC++ 是否忽略了这一点?谢谢!

最佳答案

MSVC 的早期版本有这个“错误特征”,因为它将这些变量泄漏到封闭范围中。

换句话说,它处理:

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

与:

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

查看this question的答案我询问了一个奇怪的宏定义,以获取更多详细信息。

关于visual-c++ - for循环外变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3935531/

相关文章:

c++ - 从 docker image build 中省略设置文件

c++ - Visual Studio C++ "Multithreaded Debug DLL"与 "Multithreaded DLL"

c++ - 如何*防止* "weak"链接 Visual-C++ 中的静态库符号?

c++ - 执行 rapidjson 的 Document 对象的拷贝

c++ - 无法从 const char* 转换为 const char *&

c++ - 导入库如何工作?详情?

c++ - 从 std::string_view 派生的对象的比较在 MSVC 中不明确

windows - 有没有办法找到要在 GetProcAddress 中使用的 C++ 损坏名称?

c++ - 如何在 C++ 中创建 IDirect3DSurface9(D3D 曲面)曲面数组?

c++ - 如果在运行时可用,是否自动使用 AVX/SSE?