gdb 可直接 break func_name、finish 跳出、bt 看棧幀。單體 main 幾千行無法調試。goto 亂跳**。parse_http_request() vs // 解析HTTP請求 ... 50行代碼。單一職責原則 (SRP) 天然落地。#include "mylib.h" 即可復用經過測試的模塊。stdio.h/stdlib.h/string.h/math.h/time.h 等 29 個頭文件,**經過嚴格標準化、跨平台一致、高度優化**。開發者站在巨人肩膀上,專注業務邏輯。int read_config(const char* path, Config* out) 而非 void init_everything();const、輸出參數指針、錯誤碼返回或 errno、避免可變參數 (...);static void helper() 限制鏈接作用域,減少符號污染;static inline 用於極小熱點函數,避免調用開銷,但增加代碼體積。| 反模式 | 症狀 | 重構方向 |
|---|---|---|
| 上帝函數 | 單函數 > 200 行、參數 > 7 個、嵌套 > 4 層 | 拆分為 5-10 個單一職責函數 |
| 全局變量耦合 | 函數間靠全局變量傳遞狀態 | 封裝為結構體 + 句柄,傳遞上下文指針 |
| 副作用隱藏 | 函數名 get_xxx 卻修改全局狀態/寫文件/發網絡 | 重命名為 fetch_and_cache_xxx,或拆分查詢與命令 |
| 重複代碼 | Copy-Paste 微調 | 提取公共函數 + 參數化差異 |