#define 巨集替換機制
代碼片段:
#define FORMAT "%d\n%s\n%f\n........"
作用解析
#define 是預處理器指令,在編譯前進行文本替換:
- 定義巨集名稱
FORMAT
- 替換體為字串字面值
"%d\n%s\n%f\n........"
- 後續代碼中出現
FORMAT 皆被替換為該字串
使用示例
printf(FORMAT, 10, "hello", 3.14);
// 預處理後展開為:
printf("%d\n%s\n%f\n........", 10, "hello", 3.14);
關鍵特性
- 無類型檢查,純文本替換
- 不佔用運行時記憶體,編譯期完成
- 可定義常數、字串、代碼片段、甚至帶參數的類函數巨集
- 慣例:巨集名全大寫,區別於變量/函數
優缺點
| 優點 | 缺點 |
| 編碼複用、可讀性提升 | 除錯困難(符號表無巨集) |
| 編譯期計算、零開銷 | 副作用風險(參數多次求值) |
| 條件編譯配合靈活 | 作用域全域,易命名衝突 |
現代 C 建議
- 常數優先用
const 或 enum (有類型、有作用域、可除錯)
- 函數式巨集極簡單時可用,複雜邏輯改用
inline 函數
- 字串常數可用
const char *const FORMAT = "...";
- 上一篇文章: C語言字串比較函數實現:strcmp 邏輯解析
- 下一篇文章: C語言輪盤纏布角度計算:數學建模與代碼實現
Copyright ©
程式碼之家 All Rights Reserved