【軟體開發】3分鐘學會使用 clang-format 自動格式化C++代碼

什麼是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

X. Ryan
X. Ryan

Hello!我是一個在矽谷工作,有軟體工程背景的量子計算科學家。這裡分享的內容主要是把平常研究開發時所用的小工具以及看過的東西記錄下來,同時也分享一些日常生活瑣事。

文章: 45

4 則留言

留言功能已關閉。