C语言预处理器的元编程技巧:递归宏与X-Macro
超越简单的常量定义,探索利用预处理器实现编译期代码生成、递归宏展开以及X宏模式来管理重复性数据结构。 · 难度:入门 · +10XP
C语言预处理器的元编程技巧:递归宏与X-Macro
大多数教程只讲解 #define 定义常量或简单函数宏。本教程深入预处理器的高级用法:利用宏的递归展开实现编译期整数计算(如计算阶乘),以及使用 X-Macro 模式高效维护枚举、结构体与字符串映射表。通过 __VA_ARGS__ 和宏的延迟展开,你能在编译阶段自动生成大量重复代码,减少手写错误并提升可维护性。
// 递归宏计算编译期阶乘(需借助宏的延迟展开)
#define CAT(a, b) a ## b
#define EVAL(...) __VA_ARGS__
#define FACT(n) EVAL(FACT_##n)
#define FACT_0 1
#define FACT_1 1
#define FACT_2 2
#define FACT_3 6
// 实际应用:X-Macro 生成枚举与字符串
#define COLOR_LIST \
X(RED, 0xFF0000) \
X(GREEN, 0x00FF00) \
X(BLUE, 0x0000FF)
#define X(name, val) name,
typedef enum { COLOR_LIST } Color;
#undef X
#define X(name, val) [name] = #name,
const char* color_name[] = { COLOR_LIST };