1. 程式人生 > >[C++] 編譯時的warning

[C++] 編譯時的warning

我傾向於通過程式碼手段消除所有編譯的warning。最終的產品程式碼編譯的時候應該是沒有warning的。

warning其實可以分為兩種:一種是可以忽略的,一種是不可以忽略的。
比如:int被看作bool的warning往往是不能忽略的,而MyClass*被轉換成int的warning都是可忽略的。

#pragma warning(disable: xxxx)可以顯式的忽略那些確定不會造成惡劣影響的warning。比如VC編譯器在編譯STL時候的一些warning。只有把那些可以忽略的warning都忽略之後,那些必須處理的warning才能從眾多的warning當中過濾出來。

有時候情況會比較複雜,需要區別對待。比如signed和unsigned的區別,就是比較複雜的情況,int i = vector.size()通常不要緊,但是int i = recCount卻未必是安全的。因此,我們應該對於安全的warning可以如下寫程式碼:int i = (int)vector.size(),這樣做了之後,後面那個需要判斷處理的signed和unsigned問題就會浮現出來。

如果不努力去消除那些“可以忽略的warning”,那麼最後的結果必然是warning太多,而導致所有的warning都被程式設計師所忽視。