C 語言宏不僅能定義常量,還能為運算符創建別名,這在特定場景下能提升代碼可讀性或實現特殊語法效果。本文展示如何用宏重新定義比較運算符並應用於邏輯判斷。
#include <stdio.h>
#define EQU ==
#define LAG >
#define SMA <
int main() {
int i=10, j=9;
scanf("%d", &i);
while(1) {
if(i EQU j) {
printf("==\n");
}
else if(i LAG j) {
printf(">\n");
}
else {
printf("< \n");
}
scanf("%d", &i);
}
return 0;
}
i=10、j=9,首次循環輸出 >i 值後重新比較==、> 或 <預處理階段將代碼轉換為:
if(i == j) // EQU 替換為 ==
else if(i > j) // LAG 替換為 >
else // SMA 隱含在 else 分支
| 優點 | 缺點 |
|---|---|
| 特定領域代碼更符合業務語義 | 降低代碼通用可讀性 |
| 教學演示運算符優先級 | 調試時難以對應原始碼 |
| DSL 構建基礎技術 | 可能引入難以發現的邊界錯誤 |
生產環境不推薦此類用法。標準運算符具有普遍認知度,自定義別名會增加維護成本。若需領域特定語言,建議使用函數封裝或 C++ 運算符重載。本例適合作為預處理器機制教學演示。