精華區beta Programming 關於我們 聯絡資訊
※ 引述《UNARY.bbs@bbs.cse.ttu.edu.tw (API)》之銘言: : ※ 引述《yoco.bbs@bbs.wretch.cc (眠月..)》之銘言: : > 我試了這段程式碼 : > int main () : > { : > int a, b ; // ab沒初始化 : > int c=1, d=2 ; // cd有初始化 : > std::cout << a << c ; // ac有用到,bd沒有用到 : > } : > 得到的訊息是.. : > warning C4101: 'b' : 未參考的區域變數 : > warning C4700: 所使用的區域變數 'a' 尚未初始化 : > 由此可見,也許變數的初始化也當作是被參考到.. : 看到這篇又去試了一下 : 結果同 yoco 試的 : 整理一下: : ┌────┬────┬────┐ : │宣告變數│未初使化│有初始化│ : ├────┼────┼────┤ : │ 有用到│ C4700 │(無警告)│ : ├────┼────┼────┤ : │ 沒用到│ C4101 │(無警告)│ : └────┴────┴────┘ : C4101: 未參考的區域變數 : C4700: 所使用的區域變數尚未初始化 : 所以我先前的說法有些錯誤 : 要跟 khoguan 說聲抱歉~ : C4101 跟「變數有沒有用到」的確也是有關係的 不用客氣 ^_^ 經由反覆辯難與思考,相信大家彼此都學到了新的東西。 上表中,「有初始化,但沒用到」那種情形,我剛才用一個很簡單的 例子,在 VC++ 7.1 下測試: int main() { int a = 0, b = a; } a 有初始化,也有被使用到,做為 b 的初值。但是 b 只有初始化, 而沒用到。如果使用 VC++ 預設的警告層級3 (/W3) 就沒有任何警告。 但是把層級調到 /W4 就會出現 warning C4189: 'b' : 已初始化區域變數,但並未參考 這樣的訊息和我原先的想法是一致的,也就是說「未參考」(沒用到) 和「初始化」是不同的概念。其實,把 yoco兄 的例子用 /W4 去編, 一樣可以得到相同的結論。(比 Comeau 的訊息更清楚 :-) 不過,它將 unreferenced 譯成「未參考」或許容易令人困惑。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.208.168