| 巨集 | 功能 | 範例 |
|---|---|---|
UPCASE(c) | 小寫轉大寫 | UPCASE('a') → 'A' |
DECCHECK(c) | 判斷十進位數字 | DECCHECK('5') → 1 |
HEXCHECK(c) | 判斷十六進位數字 | HEXCHECK('e') → 1 |
ARRAY_SIZE(arr) | 計算陣列元素數 | ARRAY_SIZE(int[10]) → 10 |
FPOS(type, field) | 結構成員偏移量 | FPOS(struct, member) |
INC_SAT(val) | 防溢位遞增 | val = (val+1 > val) ? val+1 : val |
ANSI C 標準巨集:__LINE__、__FILE__、__DATE__、__TIME__、__func__(C99)、__STDC__。除錯追蹤極佳工具。
#define STR(s) #s
STR(hello) → "hello"
#define CONS(a,b) a##b
CONS(var, 1) → var1
#define ANONYMOUS(type) type _anonymous##__LINE__
ANONYMOUS(static int) → static int _anonymous70; // 第 70 行
利用多層巨集展開延遲 __LINE__ 解析。
#define FILL(a) {a, #a}
enum ID {OPEN, CLOSE};
struct Msg {int id; const char* msg;};
struct Msg msgs[] = {FILL(OPEN), FILL(CLOSE)};
// 展開為 {{OPEN, "OPEN"}, {CLOSE, "CLOSE"}}
#define GET_FILE_NAME(f) #f
static char FILE_NAME[] = GET_FILE_NAME(__FILE__);
#define TYPE_BUF_SIZE(type) sizeof #type
char buf[TYPE_BUF_SIZE(INT_MAX)]; // → sizeof "0x7fffffff" → 11
#ifndef HEADER_H
#define HEADER_H
// 內容
#endif
typedef uint32_t uint32; // 精確 32 位元無號整數
typedef int16_t int16; // 精確 16 位元有號整數
建議使用 <stdint.h> 標準型別,避免自訂 byte/word/dword 造成混淆。