程式碼風格指南
本文件介紹小智 ESP32 專案的程式碼風格規範,專案使用 clang-format 工具來統一程式碼風格。
工具介紹
專案根目錄提供了 .clang-format 配置檔案,該配置基於 Google C++ 風格指南,並做了一些自定義調整。
主要格式規則
| 規則 | 說明 |
|---|---|
| 縮排 | 使用 4 個空格 |
| 行寬限制 | 100 字元 |
| 大括號風格 | Attach 風格(與控制語句在同一行) |
| 指標/引用 | 符號靠左對齊 |
| 標頭檔案排序 | 自動排序 |
| 類修飾符 | 縮排為 -4 空格 |
安裝 clang-format
Windows
winget install LLVM
# 或者使用 Chocolatey
choco install llvmLinux
# Ubuntu/Debian
sudo apt install clang-format
# Fedora
sudo dnf install clang-tools-extramacOS
brew install clang-format使用方法
格式化單個檔案
clang-format -i path/to/your/file.cpp格式化整個專案
# 在專案根目錄下執行
find main -iname *.h -o -iname *.cc | xargs clang-format -i提交前檢查格式
# 檢查檔案格式是否符合規範(不修改檔案)
clang-format --dry-run -Werror path/to/your/file.cppIDE 整合
Visual Studio Code
- 安裝 C/C++ 擴充
- 在設定中啟用
C_Cpp.formatting為clang-format - 可設定儲存時自動格式化:
editor.formatOnSave: true
CLion
- 設定 > Editor > Code Style > C/C++
- 將
Formatter設定為clang-format - 選擇使用專案中的
.clang-format配置檔案
C++ 執行時與錯誤處理
- 專案自有 C++ 程式碼以 GNU C++23 為基線,
main/中不得依賴更高版本的語言特性。 - 關閉 C++ 異常和 RTTI,不使用
throw、try/catch、dynamic_cast或typeid。 - 所有權資源使用 RAII,包括需要顯式釋放的 ESP-IDF 控制代碼和 C API 資源。除非介面明確說明,裸指標均視為非擁有指標。
- 需要攜帶錯誤值的可恢復失敗使用
std::expected<T, E>。高頻路徑優先使用小型列舉或esp_err_t,只在協議或 UI 邊界轉換為字串。 - 解引用
expected前必須檢查狀態。異常關閉時,不得對未檢查的結果呼叫value(),否則錯誤訪問會直接終止韌體。 - 程式設計師不變數被破壞時使用斷言或顯式終止,不把它偽裝成可恢復執行時錯誤。
- 實時音訊路徑使用有界佇列並避免重複分配。上限已知時優先固定容量儲存;只有效能分析證明存在分配抖動或堆碎片後才引入物件池。
特殊處理
禁用格式化
如果某段程式碼不希望被格式化,可以使用註釋包圍:
// clang-format off
// 你的程式碼
// clang-format on
注意事項
- 提交程式碼前:請確保程式碼已經過格式化
- 不要手動調整:已格式化的程式碼對齊
- 配置檔案位置:確保使用專案根目錄下的
.clang-format配置 - 檔案編碼:驗證檔案編碼為 UTF-8
常見問題
格式化失敗
- 檢查 clang-format 版本是否過低
- 確認檔案編碼為 UTF-8
- 驗證
.clang-format檔案語法是否正確
與期望格式不符
- 檢查是否使用了專案根目錄下的
.clang-format配置 - 確認沒有其他位置的
.clang-format檔案被優先使用