从宏定义到inline函数

本文探讨了宏在C语言中的应用及其优缺点,并对比了宏与普通函数的区别。此外,文章还介绍了C++中引入的inline函数如何解决宏带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一) 宏和普通函数
在TI提供的一些例程中,经常能看到像下面这种使用宏的方式。
这里写图片描述

宏经常用于简单的计算,比如求两个数的最大值或者最小值。

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

《C和指针》一书指出这样做的好处有两个:“第一,用于调用和从函数返回的代码很可能比实际执行这个小型计算工作的代码更大(博文作者注:函数调用会带来额外的开销),所以使用宏比使用函数在程序的规模和速度方面都更胜一筹;第二,也是更为重要的一点,函数的参数必须声明为一种特定的类型,所以它只能在类型合适的表达式上使用,反之,上面这个宏可以用于整形、长整型、单浮点型、双浮点数以及其他任何可以用操作符比较大小的类型。”同时,该书还指出:“和使用函数相比,使用宏的不利之处在于每次使用宏时,一份宏定义代码的拷贝都将插入到程序中,除非宏非常短,否则使用宏可能会大幅度增加程序的长度。”

宏和函数的比较如下表所示(源自《C和指针》一书)。
这里写图片描述

(二) 从宏定义到inline函数
《C++ Primer》一书指出:上面使用宏的方式很有吸引力,但是也很危险,因为它的机制和函数调用不同,只是简单地提供参数的替换(博文作者注:并不对参数的类型进行检查)。

inline函数(内联函数)的引入正是为了解决上面使用宏的方式所带来的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值