本系列第三部分建立 **註解三層體系**:檔案級、函數級、變數/行內級,並規範註解格式、內容深度與維護責任,使代碼自帶文檔屬性,大幅降低溝通成本。
//==================================================================
// 功能:從字串 strByDelete 中刪除子字串 strToDelete
// 參數:strByDelete, strToDelete
// (入口) strByDelete: 原字串 (被刪除對象)
// (出口) strToDelete: 待刪除子字串
// 返回:找到並刪除傳回 1,否則 0 (含錯誤碼說明)
// 主要思路:循環比較法尋找匹配;未處理多重匹配情況
// 參閱:《字串演算法精解》P.45
// 調用方法:int n = DeleteSubStr(buf, "abc");
// 日期:2000/08/21 09:40 -- 2000/08/23 21:45
//==================================================================
int DeleteSubStr(char* strByDelete, const char* strToDelete);
long lLineCount; // 圖形行數
float fThreshold; // 邊緣檢測閾值 (0.0~1.0)
int i, j; // 迴圈索引,無需註解 (慣用慣例)
///////////////////////////////////////////////////////////////////////
// 工程: 圖形核心庫 GeoKernel
// 作者: 張三,修改者: 李四
// 描述: 提供二維幾何基本運算 (交點、面積、布爾運算)
// 主要函數: IntersectLines, PolygonArea, BooleanOp
// 版本: v2.1.0 (2024-03-15)
// 修改: 2024-03-10 修正浮點比較誤差;2023-11-02 新增 3D 擴展介面
// 參考文獻: Computational Geometry in C (O'Rourke)
///////////////////////////////////////////////////////////////////////
#ifndef __GEOKERNEL_H__
#define __GEOKERNEL_H__
// ...
#endif
// 1. 讀取設定檔
LoadConfig();
// 2. 初始化渲染器
if (!InitRenderer()) {
// 2.1 失敗則回退軟體渲染
FallbackToSoftware();
} else {
// 2.2 成功載入著色器
LoadShaders();
}
// 3. 進入主迴圈
while (running) {
// 3.1 處理輸入
ProcessInput();
// 3.2 更新邏輯
UpdateLogic();
// 3.3 渲染幀
RenderFrame();
}
註解不是「寫給編譯器看的廢話」,而是 **「寫給 6 個月後的自己、給新進同事、給代碼審查者」的導航地圖** 。函數頭六要素、變數語義化、檔案身分證、流程序號化、複雜邏輯圖解化 —— 五大支柱構建自文檔化代碼庫,讓維護從「考古」變成「導航」。