C语言笔记 第二十一课 宏定义与使用分析

第二十一课 宏定义与使用分析

C语言中的宏定义

#define是预处理器处理的单元实体之一
#define定义的宏可以出现在程序的任意位置
#define定义之后的代码都可以使用这个宏

定义宏常量

#define定义的宏常量可以直接使用
#define定义的宏常量本质为字面量(不占用内存空间)
下面的宏常量定义正确吗?完全正确,但编译不过去,3,4句语法不符合C语言
在这里插入图片描述
21-1 宏定义分析

宏定义表达式

#define表达式的使用类似函数调用
#define表达式可以比函数更强大
#define表达式比函数更容易出错
下面的宏表达式定义正确吗?
在这里插入图片描述
21-2宏表达式分析

宏表达式与函数的对比

宏表达式被预处理器处理,编译器不知道宏表达式的存在
宏表达式用“实参”完全替代形参,不进行任何运算
宏表达式没有任何的“调用”开销
宏表达式中不能出现递归定义
在这里插入图片描述
这种方式是错误的
有趣的问题:宏定义的常量或表达式是否由作用域限制?
下面的程序合法吗?
在这里插入图片描述
21-3 宏作用域示例
强大的内置宏

含义示例
FILE被编译的文件名file1.c
LINE当前行号25
DATE编译时的日期Jan 31 2012
TIME编译时的时间17:01:01
STDC编译器是否遵循标准C规范1

21-4 宏使用综合示例
小结:
预处理器直接对宏进行文本替换(会出现歧义)
宏使用时的参数不会进行求值和运算
预处理器不会对宏定义进行语法检查
宏定义时出现的语法错误只能被编译器检查
宏定义的效率高于函数调用
宏的使用会带来一定的副作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值