巨集允許帶參數。定義中的參數稱形式參數,調用中的稱實際參數。調用時先替換巨集名,再以實參代換形參。
#define 巨集名(形參列表) 字串 巨集名(實參列表);
#define M(y) y*y+3*y k = M(5); // 展開為 k = 5*5+3*5
#define MAX(a,b) (a>b) ? a : b max = MAX(x, y); // 展開為 max = (x>y) ? x : y;
#define MAX (a,b) 會被視為無參巨集,展開錯誤。(y)*(y)((y)*(y))200/SQ(a+1) 展開為 200/(a+1)*(a+1) 運算順序錯誤。#define SQ(y) y*y sq = SQ(a+1); // 展開 a+1*a+1 → 9+1*9+1=19 (預期 100) #define SQ(y) (y)*(y) sq = 200 / SQ(a+1); // 展開 200/(a+1)*(a+1) → 200/10*10=200 (預期 2) #define SQ(y) ((y)*(y)) // 正確 sq = 200 / SQ(a+1); // 200/((9+1)*(9+1)) = 2