clang-tidy
是 LLVM 項目中的一個檢查工具,用於檢查 C++ 代碼的coding-style和可靠性。與 clang-format
不同,clang-tidy
主要被用於在程式碼編寫時檢查代碼品質,並報告可能的錯誤、警告和建議。它支援許多不同的檢查,包括代碼風格、效能、安全性等。
使用 clang-tidy
可以幫助開發人員在早期階段發現和修復可能存在的錯誤和問題,從而提高代碼的品質和可靠性。
- [延伸閱讀] LLVM教學(1): 5分鐘了解LLVM架構
- [延伸閱讀] 【軟體開發】3分鐘學會使用 clang-format 自動格式化C++代碼
clang-tidy檢查代碼的功能
clang-tidy 可以檢查以下各項代碼中的問題:
- 效能問題:例如過多的拷貝、冗長的迴圈等。
- 安全性問題:例如使用未初始化的變數、未捕獲的異常等。
- 代碼品質問題:例如過長的函數、過多的全局變數等。
- 程式碼結構問題:例如不適當的變數命名、不適當的函數名等。
Clang-tidy 具有非常強大的檢查功能,因此還可以檢查出其他種類的代碼問題。此外,Clang-tidy 的檢查規則也可以通過自訂,以滿足特定需求。
使用 clang-tidy 進行效能檢查的例子
假設有一個名稱為 example.cpp
的 C++ 檔案,可以使用以下指令進行效能檢查:
clang-tidy example.cpp --checks=performance-*
這將檢查所有以 performance-
開頭的效能檢查規則,並將可能存在的效能問題進行回報。
也可以指定特定的檢查規則,例如:
clang-tidy example.cpp --checks=performance-unnecessary-value-param
這將只檢查 performance-unnecessary-value-param
規則,並告知是否存在不必要的值參數。
自訂 clang-tidy 檢查規則
可以經由以下步驟自訂 clang-tidy 檢查規則:
- 開啟一個空的文件,並使用 .cpp 結尾命名,例如 custom_checks.cpp。
- 在文件中寫入以下代碼:
- 為自訂檢查實現 registerMatchers 和 check 函數。registerMatchers 函數用於登記代碼模式匹配器,而 check 函數用於檢查匹配到的代碼是否符合檢查規則。
- 使用 Clang-tidy 的 -add-checks 參數在命令行中執行自訂檢查。例如:
clang-tidy file.cpp -- -extra-arg=-std=c++14 -extra-arg=-I/path/to/headers -add-checks=mychecks
這些步驟可以創建自己的 Clang-tidy 檢查規則。使用者需要了解 Clang 的代碼模式匹配器以及如何使用它們,但是只要熟悉這些內容,就可以為項目創建任何種類的 Clang-tidy 檢查。
clang-format與clang-tidy的比較
clang-format 和 clang-tidy 是兩個不同的工具,分別負責自動格式化程式碼和檢查程式碼的效能、安全性和其他一些問題。
clang-format 是一個用於自動格式化 C++、Objective-C 和其他語言的工具,它可以通過遵循指定的代碼風格規則來自動將代碼格式化為易於閱讀的形式。
clang-tidy 是一個用於檢查 C++ 程式碼的工具,它可以檢查程式碼的效能、安全性、代碼品質等問題,並給出修正建議。
總而言之,clang-format 負責格式化代碼,而 clang-tidy 負責檢查代碼的問題。因此,如果希望將代碼格式化為易於閱讀的形式,則可以使用 clang-format;如果希望檢查代碼中可能存在的問題,則可以使用 clang-tidy。
詳細完整使用手冊可以參考以下網頁 https://clang.llvm.org/extra/clang-tidy/
[…] [延伸閱讀] 【軟體開發】4步驟使用Clang-Tidy提升程式碼品質:從平凡到卓越 […]
[…] [延伸閱讀] 【軟體開發】4步驟使用Clang-Tidy提升程式碼品質:從平凡到卓越 […]
[…] [延伸閱讀] 【軟體開發】4步驟使用Clang-Tidy提升程式碼品質:從平凡到卓越 […]
[…] [延伸閱讀] 【軟體開發】4步驟使用Clang-Tidy提升程式碼品質:從平凡到卓越 […]