程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C++項目中重視Warning的存在

C++項目中重視Warning的存在

編輯:關於C語言

   最近應需要,對項目中的warning進行清除,感覺PG對Linux和Windows下編程的差異性認識不夠,衍生出了不少編譯Warning,我只能悲催的幫其進行修復。C++沒有Java那麼隨意,作為項目中的底層,重視Warnig,一來可以保持代碼的健壯性,修復潛在的Bug。另外,考慮日後供給第三方作為lib,保持0 Warning就是必須了。下面,介紹主要遇到的Warning產生點:

注:測試推薦使用在線編譯器 http://codepad.org/)

1.format warning

   如果你用 %x 十六進制打印信息的話,稍不留意可能就是warning了。十六進制本身是無符號的,但是它所匹配的類型是unsigned int。在Windows中,int和long被認為是一樣的,但是Linux下,long != intLinux下,long與機器字長相關,32位機子占用4個字節,64位機子是8個字節;而Windows中均為4個字節,等同於int)。所以用 %x 匹配 unsigned long是不行的。

2.comparison warning

   當signed變量和unsigned變量比較時,就會產生此類警告。比如,我們使用sizeof和strlen時候,習慣依照其返回類型用size_t接收返回值,此時直接和int或者long類型變量做比較,則會出現warning。size_t是標准C庫中定義的,應為unsigned int,但在64位系統中為long unsigned int。如果出現此類情況非得比較,比較好的建議是,做無符號像有符號轉換。

3.reorder initialize warning

   這個出現於類的使用過程中,主要是在構造函數用初值表進行成員變量的初始化時,成員的初始化順序與類中定義的順序不一致導致。G++進行編譯,會發現該問題。

4.missing braces warning

   當結構體嵌套使用,初始化不規范,會產生此類警告。

struct INER{
    int m_i;
};
struct EXTE{
    INER m_iner;
    int m_i;
};

   定義了以上結構,初始化的時候我們如果簡單的賦值0的話,工具檢測時就得爆出數條warning了,所以需要注意下。

EXTE exte={0};

   遇到結構體變量的初始化,還是推薦使用memset函數以避免不必要的麻煩。


   暫時列出幾個容易忽略的問題,有機會再進行補充,以後編碼時,多注意規范,避免不必要的Warning。


本文出自 “felix” 博客,請務必保留此出處http://felixhwang.blog.51cto.com/3263859/1269403

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved