宏定義由 #define 完成,預處理階段進行單純文本替換(宏展開),不進行語法檢查。
#define M (y*y+3*y) // 括號不可省 #define PI 3.1415926 #define S PI*y*y // 嵌套使用已定義宏
注意:宏定義行尾不加分號,否則分號也會被替換;宏名若在引號中不展開。
#define MAX(a,b) ((a) > (b) ? (a) : (b)) #define SQ(y) ((y)*(y))
關鍵規則:
#define MAX(a,b) ✓,#define MAX (a,b) ✗(視為無參宏)。#define SQ(y) ((y)*(y))。i++)會導致多次求值,與函數行為不同。#define SSSV(s1,s2,s3,v) s1=l*w; s2=l*h; s3=w*h; v=w*l*h;
#define PIN1 int* typedef int* PIN2; PIN1 a, b; // 展開為 int *a, b; b 是 int PIN2 a, b; // a、b 均為 int*
#define PI 3.14 #undef PI // 後續代碼 PI 無效
inline 函數或 constexpr (C++) 替代。typedef。do { ... } while(0) 包裹多語句宏,使其語義上如單語句。