« Interesting bug in VC6 | 回到主頁面 | Finalizer, Dispose, Close »

March 29, 2005

The scope bug of "for loop"


將此網頁加入【百度收藏】... 加入此網頁到【del.icio.us 書籤】 technorati

Route 64 - Kang Su Gatlin talks about 64-bit對於for loop的使用,相信大家跟我一樣,總是習慣去撰寫

for(int i=0; i<5; ++i)
{

.......

}

cout << i ;

但是,若是根據以上的程式,利用VC6或是BCB會看到哪樣的ouput i?很簡單~~就是 i = 5,但是正常來說,i 的scope 在哪裡??

i 應該是在for 之內的,所以他的生命週期(scope)應該也是在其中,但是由於VC++與BCB的錯誤,此得i 的scope 變成了for 之外,造成許多程式的問題。

解決方式: #define for   if(0); else for

參考網站: BBS文章,參照侯捷老師上課內容



STL與泛行程式設計學習心得

由 Evan 發表於 March 29, 2005 將此網頁加入【百度收藏】... 加入此網頁到【del.icio.us 書籤】 technorati
引用
本文的引用網址:


以下是前來引用的連結 'The scope bug of "for loop"' 來自 Blog E
迴響

恩恩恩..這個問題在用到不同的Compiler倒是一個會讓初學者困惑的地方.....

所以在現在的環境我們有個不成文的習慣,在for loop之外會用到的變數一定會在外面宣告而不在for loop宣告...
而且..在for loop裡面宣告一個變數i或是j這種變數名稱,在for scope外面用到的話.在公司Code review會被念..:P

還有那個修正方法...似乎只能針對Visual C吧...在gcc還是不能用...所以在程式寫作風格上似乎還是需要有一定的習慣與規範才不會陷入這種因為Compiler的問題所造成的陷阱.

生魚片 發表於 March 30, 2005 02:30 PM

剛剛試了一下...那個修正方法在
g++是可以的(可是g++本來就沒這種for loop的問題)
gcc確是不行的..沒想到在gcc在if else這種地方後面沒有加上括號..是沒有scope的..真是天下無奇不有..:XD

生魚片 發表於 March 30, 2005 02:33 PM


基本上他不是個錯誤..請參考compile編譯後的碼..

October 7, 2005 11:48 AM
發表迴響









記住我的資訊?




(請輸入以下的驗證碼)