巨集定義以 #define 巨集名 字串 形式,預處理階段將所有巨集名替換為字串,稱「巨集展開」。
#define N 100 int sum = 20 + N; // 展開為 20 + 100 → 120
#define M (n*n+3*n) sum = 3*M+4*M+5*M; // 展開為 3*(n*n+3*n)+4*(n*n+3*n)+5*(n*n+3*n)
運算式兩側括號不可少,否則優先級錯誤。
#undef 可終止。#define S PI*y*y 其中 PI 為已定義巨集。#define UINT unsigned int,但與 typedef 有本質差異。#define PIN1 int * typedef int * PIN2; PIN1 a, b; // 展開 int *a, b; → a 指標、b 整數 PIN2 a, b; // a、b 皆為 int* 指標
typedef 在編譯期重新命名類型說明符,具類型語意;巨集僅字串替換,易出錯。