C语言---宏

一、宏的本质(唯一核心)

宏是 #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. 无语法校验坑

宏只替换不检查语法,错误只会在编译阶段暴露,极难排查

五、最终使用准则(精华总结)

  • 固定常量、编译标记:用无参宏

  • 简单四则运算:用带参宏,严格双层括号

  • 复杂逻辑、自增参数、函数传参:一律不用宏

  • 宏名统一全大写,区分变量

相关推荐
郝学胜-神的一滴1 小时前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
言乐61 小时前
Python实现关税自动计算模型
开发语言·python·django·virtualenv·pygame
朝朝辞暮i1 小时前
C++ 第 14 课:引用 &
开发语言·c++·算法
白山编程大哥1 小时前
适合初学者练习的 C/C++ 开源项目推荐
c语言·c++·开源
梅雅达编程笔记2 小时前
04-Python CSV数据保存与翻页抓取
开发语言·爬虫·python·pandas·数据采集·csv
小灰灰搞电子2 小时前
C 语言 <stdlib.h> 头文件详解
c语言·stdlib.h
C++ 老炮儿的技术栈2 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
估值探索者2 小时前
【Python量化策略实战 #04】Donchian 通道假突破太多?用 ATR 阈值过滤跑通真实突破信号
开发语言·python·接口·api接口·数据api接口·股票数据api接口
个 人 练 习 生2 小时前
C++:模板初阶详解
开发语言·c++·经验分享·学习