2010-10-14 142 views
2

我试图使用一个程序写在几年前,并在先前版本的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变量只能在第一个循环中使用。当我尝试编译它时,我得到了错误“'我':未申报的标识符”为开始第二个循环的行,这是有道理的。这只是在以前版本的VC++中被忽略了吗?谢谢!

回答

5

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

换句话说,它处理:

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

一样:

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

查看答案this question我问一个奇怪的宏定义,了解更多详情。

+0

好的谢谢。这就说得通了。不是真的期待改变所有这些错误... – Jade 2010-10-14 17:00:17

+0

也许全局搜索和代替'for(i ='with'for(int i ='?虽然这可能会给你错误去_other_方式 – paxdiablo 2010-10-14 17:03:25

+0

你以前问过问题非常深刻,感谢您的链接!也许你是对的,做这种搜索和替换可能会减少工作,即使我必须回去修复其他一些错误。 – Jade 2010-10-14 17:20:57