21.宏定义的使用

C语言中的宏定义

#define预处理器处理的单元实体之一

#define定义的宏可以出现在程序的任意位置

#define定义之后的代码都可以使用这个宏

#define定义的宏常量可以直接使用

#define定义的宏常量本质为字面量,不占用任何内存

宏定义表达式

#define表达式的使用类似函数调用

#define表达式可以比函数更强大

#define表达式比函数更容易出错

求一个数组的大小

# define _DIM(a)  sizeof(a)/sizeof(*a)

预编译  gcc -E  a.c -o a.i

宏的性质

宏表达式被预处理器处理,编译器不知道宏表达式的存在

宏表达式用'"实参"完全替代形参,不进行任何运算

宏表达式没有“调用“开销

宏表达式不能进行递归定义

宏定义的常量或表达式是否有作用域限制? 无作用域限制

强大的内置宏

__FILE__   被编译的文件名

__LINE__ 当前行号

__DATE__ 编译时的日期

__TIME__ 编译时的时间

__STDC__ 编译器是否遵循标注c规范

例子:

#define  MALLOC(type,x)  (type*)malloc(sizeof(type)*x)

#define FREE(p) (free(p),p=nullptr)

#define LOG(s)  printf("[%s] {%s:%d} %s \n", _DATE_,_FILE_,_LINE_,s)

小结

预处理器直接对宏进行文本替换

宏使用时的参数不会进行求值和运算

预处理器不会对宏定义进行语法检查

宏定义时出现的语法错误只能被编译器检测

宏定义的效率高于函数调用

宏的使用会带来一定的副作用

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值