带参宏、函数、及内联函数

带参宏即为带有参数的宏定义,要注意的是,在书写带参宏时一定要给每一个参数带括号,并给表达式整体带括号。如求a,b中较大者:

#define MAX(a,b)  (((a)>(b))?(a):(b))

众所周知,宏定义是在预处理阶段由预处理器对所定义的宏进行原地展开的,而预处理器是不带参数检验功能的,所以带参宏无法对其参数进行校验,这是它的一个缺陷。同时对它的处理是原地替换,所以不存在传参,也就免去了传参时的资源调度,提高了运行效率,这是它的一个优点。

而对函数的处理是在编译阶段由编译器进行的,编译器带有参数检验功能,可以对函数的参数进行类型静态校验,避免传参错误,与带参宏相比,这是函数的一个优点。同时,函数传参时需要调度资源,降低了程序的运行效率,这是它的一个缺点。

内联函数是通过在函数定义时在函数返回值类型前加inline关键字来实现的,在编译阶段,编译器会在调用内联函数处直接将inline函数原地展开,不存在传参。可见内联函数就结合了函数和带参宏二者的优点与一身,即提高了效率,又具有参数检验。

 

注意inline关键字只是建议编译器将该函数当做内联函数来处理,当函数体很短时,编译器会考虑其建议,直接将inline函数在调用处原地展开,但当函数体很长,直接展开很费劲时,编译器就不会接受inline关键字的建议,依然将该函数当做普通函数来处理,这时候虽然函数有inline关键字修饰但不会被在调用处原地展开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值