⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

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 };
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 105 篇
0 完成
🔥 0