※ 引述《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