使用g 進行C 編譯的徹底而詳細的警告標誌
Gcc 提供了一套全面的警告標誌來幫助開發人員檢測潛在問題他們的代碼。若要在C 中啟用徹底且詳細的警告,請考慮以下建議:
基本警告:
- -迂腐:遵守嚴格C語言標準。
- -Wall:啟動所有普遍接受的warnings.
- -Wextra:將警告範圍擴大到-Wall之外。
- -Wcast-align:偵測未對齊的指標強制轉換。
- -Wcast-qual:警告指標類型的變更qualifiers.
- -Wctor-dtor-privacy:突顯類別建構子與析構函數存取修飾符的問題。
- -Wdisabled-optimization:辨識代碼可以最佳化但不能最佳化。
- -Wformat=2:改進格式說明符編譯期間的處理。
- -Winit-self:防止變數重新初始化為自身。
- -Wlogic-op
- -Wlogic-op
-Wlogic-op- :檢測潛在的運算子優先級issues.
-Wmissing-declarations- :警告變數和變數的缺失聲明函數。
-Wmissing-include-dirs- :突出顯示缺少的包含目錄。
-Wnoexcept- :鼓勵異常處理機制。
-Wold-style-cast- :識別潛在的代碼相容性issues.
-Woverloaded-virtual- :警告虛擬方法重載。
-Wredundant-decls- :指出冗餘聲明。
-Wshadow- :防止無意的陰影變數。
-Wsign-conversion- :偵測可能的符號轉換錯誤。
-Wsign-promo- :突顯潛在的符號提升問題。
-Wstrict-null-sentinel- :透過控制空哨兵增強程式碼安全
-Wstrict-overflow=5- :將整數等級溢出限制為五個警告。
-Wswitch-default- :確保全面switch 語句處理。
-Wundef
:警告未定義的變數或巨集。
-Wno-unused
:排除未使用的變數警告,以增強對更關鍵問題的關注。
- 可選但有問題的警告:
-Wdisabled-optimization- :可能表示次優代碼,但不一定是錯誤。
-Wfloat-equal- :可能會導致安全相等比較誤報。
-Wold-style-cast- :第三方函式庫中可能會出現誤報。
-Wsign-conversion- :需要仔細注意資料類型以防止錯誤。
-Wsign-promo
:與 -Wsign-conversion 類似的注意事項。
-Wswitch-default
:強制明確處理 switch 語句情況,但可能很乏味。
- 警告排除:
由於潛在的誤報或實用性有限,這些警告被省略: -Wabi- :需要編譯來自不同來源的二進位。
-Waggregate-return- :可能指示隱式資料型別conversions.
-Wconversion- :可能會產生無害隱式轉換的警告。
-Weffc - :可能會被不相關的警告弄亂。
-Winline- :可能不適用於所有內嵌方法情境。
-Winvalid-pch- :不適用於不使用預編譯頭的專案。
-Wmissing-format-attribute- :需要不常用的 GNU 擴充。
-Wpangled- :需要手冊類佈局的最佳化。
-Wstack-protector- :需要特定的編譯器標誌進行堆疊保護。
-Wstrict-aliasing=3- :提供與較低等級相比,附加警告有限。
-Wswitch-enum
:限制過於嚴格,可能不適用於所有用例。
-Wunsafe-loop-optimizations
:在某些情況下會產生虛假警告。