宏函数跟函数的不同
宏定义跟函数的不同点,可以参考函数的构成,调用原理等维度进行。
函数特点:
1.编译期解析;2.可以有传入参数及类型检查;3.调用过程涉及参数压栈,寄存器状态保护等;4.执行完可以有返回值;
参考如上内容,不难发现宏函数跟函数的不同:
不同点:
1.宏函数本质是文本替换,发生在预处理阶段,随后再参与编译过程;
2.宏函数的没有参数检查的机制;
3.一般函数调用涉及的现场保护操作,宏函数都没有,因此执行效率更高;
4.一般函数调用可以有返回值的,而宏函数无返回值;
宏定义跟typedef的区别
先直观看一下使用宏跟typedef的表面区别
#defne MY_INT int
typedef YOUR_INT int;
观察一下就可以知道,除了关键字不同,还有就是define用到了#,且没有“:”,#include<…>大家都熟悉,也用到了#,没错,#表示预处理器支持的指令;
而typedef后面有“:”,即这是一条语句;
其实,你的int我的int完全不一样!
- 宏定义如前所述,用于复杂文本替换,由预处理器支持;而typedef是C/C++的一部分,用于对已有类型取一个别名,可以提高代码的可读可移植性;
- 在类型检查方面,typedef在编译器看来,跟原来数据类型一样,因此具备正常类型检查机制,int有的,MY_INT也有;
- typedef类型别名是一条条语句,而宏定义并不是语句(它没分号)