2010-10-14 139 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