上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
lsk 喜歡上這裡的冒險者
註冊時間: 2007-06-20 文章: 93
20.59 果凍幣
|
發表於: 2008-3-7, AM 7:30 星期五 文章主題: 小提醒 |
|
|
在VC++的Debug模式下,變數如果沒有被初始化,會被Compile自動設定為0;可是在Release模式下,這個動作會被忽略。所以要是沒有好好的做初始化,有些很難發現的bugs就會在release的時候反咬你一口!
代碼: |
//我們有一個變數a被拿來當作一個flag:
int a;
if( a == 0 )
//do something...
else
//do anther thing...
|
在Debug模式的時候,因為a會被預設成0,所以會do something...。但是在Release的時候,你無法預知a會是什麼值!它並不一定會是0,也因此得到了我們不想要的結果。
反過來說,要是你的Debug模式一切正常,但是Release卻有問題的時候,可以優先檢查你的變數是不是有適當的初始化了。
記下一個小提醒給大家也給我自己,因為我昨天才花了三四個小時抓了一個這樣的bug~ (嗚,沒錯,是我忘了初始化...) |
|
回頂端 |
|
|
happylin 略有貢獻的成員
註冊時間: 2007-07-26 文章: 70
127.34 果凍幣
|
發表於: 2008-3-7, AM 9:02 星期五 文章主題: |
|
|
看來你沒有看compiler 結果的習慣.
沒有初始化就用的變數. VC 都會給妳一個warring .. |
|
回頂端 |
|
|
lsk 喜歡上這裡的冒險者
註冊時間: 2007-06-20 文章: 93
20.59 果凍幣
|
發表於: 2008-3-8, AM 2:55 星期六 文章主題: |
|
|
happylin 寫到: | 關於這個問題其實你可以多留意compiler的結果,
沒有初始化就用的變數. VC 都會給妳一個warring喔 |
多謝指教~ 新的VC2005有一大堆有關deprecated的function name的warning,常常一下幾百個,很容易就被忽略沒看了
另外,我做了個實驗,如果是local variable(像我在上面寫的例子),的確會在warning list裡面看到warning C4700: uninitialized local variable 'aa' used。可是要是是一個member variable(我自己犯的例子)或是一個global variable沒有初始化,compiler是不會有反應的。(我的warning level是W3) 同樣的情況也發生在gc++。
所以還是要養成好的習慣呢~
--
對不起,忍不住在引用的地方改了樓上的回文。討論和回應是很好的,但是兄台您的筆鋒實在太銳利,我第一眼看完的第一個反應是:"誰說我都沒在看!",當場就想反駁回去。然後想想,的確,我是沒有每一次都看的;這才去做了點實驗。再請多多指教。 |
|
回頂端 |
|
|
vamper 對這略感興趣的新人
註冊時間: 2007-06-23 文章: 29 來自: 台灣 18.82 果凍幣
|
發表於: 2008-3-8, AM 9:42 星期六 文章主題: 主題能吃嗎? |
|
|
最怕的是工程師討厭看一推warning,就直接針對某些warning打上:
#pragma warning(disable: 4700) 或是在專案設定忽略重要的warning。
BCB2007滿好玩的是,出現3百多的警告之後,直接給你一錯誤訊息:
對不起先生!你的警告太多了,不給你繼續compiler。
我也火大,把warning全部忽略掉= =。(這是不好的,請不要跟我一樣) |
|
回頂端 |
|
|
|