近期清理專案 Warning,發現團隊對 Linux/Windows 跨平台編程差異認識不足,產生大量編譯警告。重視 Warning 能保持程式碼健壯、修復潛在 Bug,若作為第三方 lib 發布,0 Warning 是底線。以下歸納主要警告來源:
用 %x 輸出十六進制時,對應類型應為 unsigned int。Windows 下 int 與 long 同為 4 位元組,但 Linux 下 long 隨機器字長(32 位 4B、64 位 8B),%x 匹配 unsigned long 會報警。建議使用 %lx 或強制轉型。
size_t(C 標準庫定義,32 位為 unsigned int,64 位為 long unsigned int)與 int/long 比較會觸發。若必須比較,建議顯式轉換為無號型。
建構函數初始化列表中,成員初始化順序與類別定義順序不一致。G++ 會檢測並警告。務必保持一致。
struct INNER { int m_i; };
struct OUTER { INNER m_iner; int m_i; };
OUTER outer = {0}; // 警告:缺少內層大括號
建議使用 memset(&outer, 0, sizeof(outer)) 避免麻煩。
編碼時多注意規範,減少不必要的 Warning。後續再補充更多案例。
本文出自「felix」博客,轉載請保留出處:https://felixhwang.blog.51cto.com/3263859/1269403