C 中徹底而詳細的 g 警告標誌
與 gcc 下的 C 類似,一套全面的警告標誌可以大大提高 C 中的程式碼品質。對於C ,建議的標誌如下:
-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused
可疑警告
雖然上面的列表涵蓋了最有用的警告,但也包括某些可疑警告:
-
Wno-unused: 此警告表示未使用的變量,這對於識別潛在不必要的程式碼非常有用。但是,它可能會產生誤報,其有用性取決於編碼風格。
-
Wdisabled-optimization: 此警告標記無法最佳化的程式碼部分。它可以幫助識別潛在的程式碼改進,但可能會產生誤報。
-
Wfloat-equal: 此警告警告在浮點運算中使用精確的數值比較,這可能會產生不確定的結果,因為捨入誤差。它可能並不普遍適用。
-
Wold-style-cast: 此警告是透過使用舊式的轉換觸發的。雖然它可以幫助識別潛在的可移植性問題,但它也可能會在庫程式碼中產生誤報。
-
Wsign-conversion: 此警告表示有符號和無符號整數之間可能存在不安全的轉換。包含它是為了安全,但可能會產生許多誤報,需要仔細分析。
-
Wsign-promo: 與 Wsign-conversion 類似,此警告標記有符號整數隱式提升為更大類型。它可以幫助識別潛在的溢出問題。
-
Wswitch-default: 此警告強制在 switch 語句中使用預設情況。這有助於確保所有可能的情況都得到處理,但並不總是理想的。
不包含警告
由於各種原因,某些警告被排除在預設清單之外:
-
Wabi: 不適用於二進位相容性不是問題的情況。
-
Waggregate-return: 不被視為錯誤,作為回傳值最佳化通常會處理任何負面影響。
-
Wconversion: 標記隱式轉換,這通常是良性的。
-
Weffc : 可能產生太多警告當未初始化初始值設定項清單中的所有資料成員時。
-
Winline: 可能不會總是對內聯函數最佳化有用。
-
Winvalid-pch:不使用預編譯標頭時不適用。
-
Wmissing-format-attribute:不使用 gnu 擴充時不使用。
-
Wno-long-long: 可能不適用於 C 0x 及更高版本。
-
已填入: 可以幫助最佳化類別佈局,但可能不總是實用於維護。
-
Wstack-protector: 不使用 -fstack-protector 則不使用。
-
Wstrict-aliasing: Level 3 包含在 -Wall 中,但可能不是必需的。
-
Wswitch-enum: 不適用於所有 switch 語句,因為它需要明確處理枚舉變更。
-
Wunsafe-loop-optimizations: 產生許多虛假警告,需要手動驗證。
-
Wzero-as-null-pointer-constant:僅 GCC-4.7 的警告。
透過了解優點和由於這些警告的局限性,開發人員可以自訂它們以最適合其特定的編碼實踐和專案要求。
以上是提高 C 代碼品質的最佳 g 警告標誌是什麼,應仔細考慮或排除哪些警告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!