内联函数和宏定义的一些破事

我们知道内联函数和普通函数相比可以加快程序的运行速度,在写C++的类的时候,我们都会刻意的把某些简单的函数声明成内联函数,因为他不需要终端调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。宏呢?宏就是一个简单的替换。

差别:内联函数要做参数类型的检查

      宏就是简单的替换,不做任何的类型检查

inline内联就是在调用函数的地方不做跳转,而是把代码直接写到那里去,对于短小的代码来说,inline可以带来一定的效率提升,而且和C时代的宏定义的函数相比,inline更加的安全,也许这里很多人就会疑惑,宏怎么定义函数呢?

看例子

#define MAX(x,y)  (x)<(y)?(x):(y)


int _tmain(int argc, _TCHAR* argv[])
 {
printf("%d", MAX(3, 4));
while (1);
return 0;

}


从上面我们可以看到,这个宏函数时没有类型检查的,就好像一个函数模板一样,他的安全性是存在问题的。

再举一个安全性的例子吧,引起安全性的原因主要还是宏函数时直接替换的原因导致的

#define MAX(x,y)  (x)>(y)?(x):(y)
#define add(x,y)  x+y
int _tmain(int argc, _TCHAR* argv[])
 {
printf("%d", 1*add(1,2)*3);
while (1);
return 0;
}

我本来想要的结果是这样的1*2*3 = 6

结果输出确实这样的



inline相比宏函数来说更加的安全可靠,可是这个是以增加空间消耗为代价的,至于是否需要inline函数,就需要根据具体的实际情况来取舍了。


使用inline函数一般有以下几种情况:

一个函数不断被重用

函数只有简单的几行,并且函数不包括for、while、switch语句

一般来说小程序时不需要使用到inline函数的。

还有一点要说清楚的是,不要听我的误导说宏函数就意味宏定义的就是一个函数了,他不是一个函数,他的功能就是在编译前,将程序中的有关字符串替换成宏体,这个替换就是直接的文本替换,没有任何的安全检查

而inline函数时函数,但是在编译中不单独产生代码,而是将有关的代码嵌入到调用处。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值