程式碼風格指南

本文件介紹小智 ESP32 專案的程式碼風格規範,專案使用 clang-format 工具來統一程式碼風格。

工具介紹

專案根目錄提供了 .clang-format 配置檔案,該配置基於 Google C++ 風格指南,並做了一些自定義調整。

主要格式規則

規則說明
縮排使用 4 個空格
行寬限制100 字元
大括號風格Attach 風格(與控制語句在同一行)
指標/引用符號靠左對齊
標頭檔案排序自動排序
類修飾符縮排為 -4 空格

安裝 clang-format

Windows

winget install LLVM
# 或者使用 Chocolatey
choco install llvm

Linux

# Ubuntu/Debian
sudo apt install clang-format

# Fedora
sudo dnf install clang-tools-extra

macOS

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.cpp

IDE 整合

Visual Studio Code

  1. 安裝 C/C++ 擴充
  2. 在設定中啟用 C_Cpp.formatting 為 clang-format
  3. 可設定儲存時自動格式化:editor.formatOnSave: true

CLion

  1. 設定 > Editor > Code Style > C/C++
  2. 將 Formatter 設定為 clang-format
  3. 選擇使用專案中的 .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

注意事項

  1. 提交程式碼前:請確保程式碼已經過格式化
  2. 不要手動調整:已格式化的程式碼對齊
  3. 配置檔案位置:確保使用專案根目錄下的 .clang-format 配置
  4. 檔案編碼:驗證檔案編碼為 UTF-8

常見問題

格式化失敗

  • 檢查 clang-format 版本是否過低
  • 確認檔案編碼為 UTF-8
  • 驗證 .clang-format 檔案語法是否正確

與期望格式不符

  • 檢查是否使用了專案根目錄下的 .clang-format 配置
  • 確認沒有其他位置的 .clang-format 檔案被優先使用

相關連結