for循环外的变量范围

Posted

技术标签:

【中文标题】for循环外的变量范围【英文标题】:scope of variable outside for loop 【发布时间】:2010-10-14 16:50:41 【问题描述】:

我正在尝试使用几年前编写并在以前版本的 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++ 中被忽略了吗?谢谢!

【问题讨论】:

【参考方案1】:

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

换句话说,它处理了:

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

同:

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

请参阅this question 的答案我询问了一个奇怪的宏定义,以了解更多详细信息。

【讨论】:

好的,谢谢。这就说得通了。不是很期待改变所有这些错误...... 也许是全局搜索并用 for (int i = 替换 for (i = ?尽管这可能会给您带来other方式的错误。 您之前提出的问题非常有见地,感谢您的链接!也许您是对的,即使我必须返回并修复其他一些由此产生的错误,进行搜索和替换可能也会减少工作量。

以上是关于for循环外的变量范围的主要内容,如果未能解决你的问题,请参考以下文章

如何访问for循环外的值

变量声明在循环体内还是循环体外的争论

我如何在 for 循环外使用 for 循环范围变量形式?

4/26打卡,范围for循环

for循环中计数器变量的范围是啥?

c++、java、C#之间的for循环初始化变量范围