关于C语言中的宏

宏:Macro,是一种批量处理的称谓。

宏是一种规则或模式,或称语法替换。

在预编译时进行,称作宏展开。

C语言中的宏定义:

1)#define是预处理器处理的单元实体之一;

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

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

定义宏常量:

1)可以直接使用;

2)本质为字面量。

宏定义表达式:

1)#define表达式的使用类似函数调用,但是宏定义是原地展开,没有调用开销,而函数是跳转执行再返回,有比较大的开销;

2)#define表达式比函数更容易出错,因为宏定义不会进行语法分析,类型检查,只是文本替换,出错后原因也更难找;

3)宏表达式只会直接文本直接替换,用“实参”完全替代形参,不进行任何运算;

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

5)宏表达式中不能出现递归定义。

宏与作用域:

1)宏定义并没有作用域的限制;

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

内置宏:

__FILE__ 被编译的文件名

__LINE__ 当前行号

__DATE__ 编译时的日期

__TIME__ 编译时的时间

__STDC__ 编译器是否遵循标准C规范

宏规范写法:

1)宏名大写;

2)宏定义语句末尾不加分号;

3)宏函数的形式参数不加类型。

注意:

1)宏定义可以嵌套;

2)宏定义不能出现在字符串的“”中;

3)宏定义不分配内存,变量定义才分配内存;

4)宏定义只是简单的替换,而且是直接对源码的字符串替换;

5)宏函数和自定义函数相比,效率更高但是安全性低且会使编译生成的目标文件变大;宏函数没有分配和释放栈帧、传参、传返回值等一系列工作,适合那些简短并且频繁调用的函数。

参考:https://blog.csdn.net/small_prince_/article/details/80575896

          https://blog.csdn.net/abc_12366/article/details/79155540

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值