函数式宏定义和自定义函数的区别是什么?

Posted 登峰人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式宏定义和自定义函数的区别是什么?相关的知识,希望对你有一定的参考价值。

自定义函数:

技术分享图片

 宏函数

 技术分享图片

 

(1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以危险性高;但因为省去了函数的调用,返回,释放,所以效率比自定义函数高;

 

(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。

如果MAX是个普通函数,那么它的函数体return a > b ? a : b; 要编译生成指令,代码中出现的每次调用也要编译生成传参指令和call指令。而如果MAX是个函数式宏定义,这个宏定义本身倒不必编译生成指令,但是代码中出现的每次调用编译生成的指令都相当于一个函数体,而不是简单的几条传参指令和call指令。所以,使用函数式宏定义编译生成的目标文件会比较大。

(3)在执行复杂功能时,如递归,函数式宏定义往往会导致较低的代码执行效率。

尽管函数式宏定义和普通函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现。

 


以上是关于函数式宏定义和自定义函数的区别是什么?的主要内容,如果未能解决你的问题,请参考以下文章

C语言陷阱与技巧第18节,函数式宏定义的“缺陷”,没有参数类型检查,产生多次副作用怎么办?

C语言陷阱与技巧第7节,define函数式宏定义不能用普通函数代替吗?为什么要使用do{}while包裹代码

MySQL存储过程和自定义函数Navicat for mysql创建存储过程和函数调用存储过程和函数的区别

oracle存储过程和自定义函数

信号和自定义信号

有关C语言的内部函数和外部函数的定义说明