編譯首遍掃描前自動運行,處理 # 開頭指令:#include、#define、條件編譯等。合理使用提升可讀性、可移植性、模組化程度。
宏 = 標識符代表字符串。宏展開 = 預處理階段以定義體文本替換所有宏名出現處(純文本替換,不做語法檢查)。
#define MACRO_NAME replacement_text
replacement_text 可為常數、表達式、代碼片段\ 換行#define M (y*y + 3*y) // 正確:外層括號保護優先級 #define M y*y + 3*y // 危險:s = 3*M → 3*y*y + 3*y + ... s = 3*M + 4*M + 5*M;
展開後:
正確 → s = 3*(y*y+3*y) + 4*(y*y+3*y) + 5*(y*y+3*y);
錯誤 → s = 3*y*y+3*y + 4*y*y+3*y + 5*y*y+3*y;(結果完全不同)
inline 函數或 const 替代#define PI 3.14159 #define MAX_SIZE 100
編譯時直接文本替換,無內存開銷,便於統一維護魔術數字。