2010-09-17 54 views
0

即使沒有可能會保持未初始化,我仍然得到這個警告。 Visual Studio 2008編譯器無法檢測到這一點。C++:如何防止「可能未初始化的警告」,如果我確定它未被初始化?

如何在這段代碼中禁止此警告?

+2

發佈您的代碼;你可能是錯的,或者可能有另一種方式來編寫它,以便編譯器「知道它」。 – 2010-09-17 00:13:42

+0

嗯,我設法通過使用函數而不是布爾標誌來隱藏警告......現在函數返回標誌,而不是打開/關閉設置標誌的if語句。奇怪的。 – Newbie 2010-09-17 00:21:14

+0

這是有道理的,因爲你現在可能只是直接將函數值分配給一個變量。問題是,你是否在函數中正確地初始化標誌,並且/或函數是否總是返回一個值? – 2010-09-17 00:32:29

回答

2

我會傾向於與編譯器在這一方;你可能在一個並不總是命中的嵌套條件語句中初始化它。但是,如果您確實堅持忽略警告,則可以使用帶有警告編號的相應#pragma指令。

+0

啊,謝謝,雖然我現在通過改變它的做事方式來使代碼工作。 – Newbie 2010-09-17 00:22:59

+1

隨時。爲了將來的參考:如果你做'int x;如果(條件)x = 3; else if(anotherCondition)x = 4;'此時x仍可能未初始化,編譯器會警告您。你可以通過添加'else'catch-all來解決這個問題,或者從'int x = 0'開始;或可接受的默認值。 – Alex 2010-09-17 00:26:31

+0

請注意,至少對於像int和double這樣的簡單類型,優化程序應該能夠刪除不必要的「int x = 0」步驟,如果它確實看到所有分支覆蓋它,所以它的下降很少(除了它略微程序員理解代碼的誤導性噪聲)。 – 2010-09-17 01:39:44