一、宏的本质唯一核心宏是#define定义的预处理纯文本替换。关键特性记死这4点无类型、不占内存、不运行计算预处理阶段直接无脑粘贴替换#define 后第一个标识符就是宏名后面全是替换内容宏只改代码文本不参与程序运行二、宏的两种分类1. 无参宏常量/标记格式#define 宏名 内容用途定义常量、空宏标记用于条件编译#define N 100 // 常量替换 #define DEBUG // 空宏仅做标记2. 带参宏代码模板格式#define 宏名(参数) 表达式用途简化简单运算无函数调用开销#define ADD(a,b) ((a)(b))三、宏 vs 变量最简区分宏改代码文本预处理生效无内存无类型变量存运行数据编译运行生效占内存有类型四、带参宏必避的3个致命坑高频报错1. 优先级坑最常见参数、整体必须双层加括号否则运算优先级错乱❌ 错#define MUL(a,b) a*b✅ 对#define MUL(a,b) ((a)*(b))2. 参数重复执行坑参数含i、函数调用时宏会重复展开执行产生逻辑BUG 这种场景坚决不用宏改用函数3. 无语法校验坑宏只替换不检查语法错误只会在编译阶段暴露极难排查五、最终使用准则精华总结固定常量、编译标记用无参宏简单四则运算用带参宏严格双层括号复杂逻辑、自增参数、函数传参一律不用宏宏名统一全大写区分变量
阅读完成 · 觉得有帮助?