什麼是clang-format
Clang-format 是一個用於代碼格式化的工具。它可以自動格式化程式碼,使其符合指定的程式碼風格規範,並讓代碼可讀性大大提高。Clang-format 可以應用於 C、C++、Objective-C 和其他語言,並支援各種不同的代碼風格,包括 LLVM、Google、Chromium 和其他組織的風格。它是一個非常方便且實用的工具,對於提高代碼可讀性和整齊美觀度有很大的幫助。clang-format是在LLVM的clang專案中的一個tool。
clang-format的使用範例
假設有一個名為 “example.cpp” 的C++檔案,並且想要使用 Google 風格對其進行格式化。可以在命令行中執行以下命令:
clang-format -style=google -i example.cpp
此命令將對 “example.cpp” 檔案進行格式化,並使用 Google Style。”-i” 選項指示 Clang-format 直接修改原始檔案,而不是輸出結果到控制台或其他檔案。
使用前的程式碼

使用clang-format自動格式化後的程式碼

由這個範例可以看到,使用 clang-format 後的代碼縮排和排版更加整齊,也更加易於閱讀。
此外,也可以指定自己的格式化配置文件,例如:
clang-format -style=file -i example.cpp
在工作目錄中,可以創建一個名為 “.clang-format” 的配置檔案,其中定義了想要使用的格式化風格。Clang-format 將會自動讀取這個配置檔案,並按照指定的格式進行格式化。
以下是一個.clang-format檔案的範例。
---
Language: Cpp
# BasedOnStyle: LLVM
# AllowShortFunctionsOnASingleLine: None
# AllowShortIfStatementsOnASingleLine: false
# AllowShortLoopsOnASingleLine: false
# ColumnLimit: 120
IndentWidth: 4
TabWidth: 4
UseTab: Never
# IndentCaseLabels: false
# MaxEmptyLinesToKeep: 1
BreakBeforeBraces: Allman
# SpaceBeforeParens: ControlStatements
# SpaceBeforeAssignmentOperators: true
# SpaceAfterAssignmentOperators: true
# SpaceBeforeCpp11BracedList: false
# ContinuationIndentWidth: 4
...
這個 .clang-format 檔案指定了以下格式化選項:
- 代碼的語言是 C++。
- 基於 LLVM 風格。
- 禁止在單行上寫短函數。
- 禁止在單行上寫短 if 語句。
- 禁止在單行上寫短迴圈。
- 每行的字符數不得超過 120。
- 縮排寬度為 4 個空格。
- Tab 寬度為 4 個空格,並且絕不使用 Tab。
- 使用 Allman 風格排列大括號。
- 在控制語句(如 if、for、while 等)前添加空格。
- 在賦值運算符前後添加空格。
- 禁止在 C++11 風格的列表前添加空格。
- 繼續縮排的寬度為 4 個空格。
這只是一個簡單的 .clang-format 檔案,可以根據需求進一步調整選項以控制代碼的格式化風格。
clang-format常使用到的參數
clang-format 支援許多不同的參數,以控制格式化結果的Style。以下是一些常用的參數:
-style
:指定代碼格式化風格。可選值包括 “llvm”、”google”、”chromium”、”mozilla” 等等。-i
:指示 Clang-format 直接修改原始檔案,而不是將格式化結果輸出到控制台或其他檔案。-verbose
:輸出詳細的執行訊息,以便追蹤 Clang-format 的運作狀況。-lines=<起始行數>:<結束行數>
:指定 Clang-format 只格式化檔案中的特定區間。-assume-filename=<檔案名稱>
:指定代碼檔案的名稱,以便 Clang-format 可以正確運作。
這些參數只是 Clang-format 的一些基本選項,實際上它還有許多其他選項,可以根據需求進一步調整代碼格式化的風格。可以通過在命令行中執行 clang-format --help
來獲取有關 clang-format 的更多資訊。
更多詳細內容可以參考此網頁https://clang.llvm.org/docs/ClangFormat.html
- [延伸閱讀] 【Valgrind教學】8分鐘學會使用Valgrind偵測C與C++的Memory Leaks
- [延伸閱讀] 【軟體開發】Python代碼覆蓋率100%:使用unittest進行單元測試,讓程式更可靠!
[…] [延伸閱讀] 【軟體開發】3分鐘學會使用 clang-format 自動格式化C++代碼 […]
[…] [延伸閱讀] 【軟體開發】3分鐘學會使用 clang-format 自動格式化C++代碼 […]
[…] [延伸閱讀] 【軟體開發】3分鐘學會使用 clang-format 自動格式化C++代碼 […]
[…] [延伸閱讀] 【軟體開發】3分鐘學會使用 clang-format 自動格式化C++代碼 […]