关于内联函数(inline)和宏的一些理解


1.内联函数和宏相比,可以调试,宏不行。
2.和函数相比,编译以后,直接内嵌在主函数里,不用走调用函数,保存环境的流程。因而省去函数调用开销。
3.内联函数和宏相比,不是简单的代码块替换,减少一些安全隐患:例如:

// 返回 i 的绝对值的宏
#define unsafe(i) \
         ( (i) >= 0 ? (i) : -(i) )
 
// 返回 i 的绝对值的内联函数
inline
int safe(int i)
{
   return i >= 0 ? i : -i;
}
 
int f();
 
void userCode(int x)
{
   int ans;
 
   ans = unsafe(x++);   // 错误!x 被增加两次
   ans = unsafe(f());   // 危险!f()被调用两次
 
   ans = safe(x++);     // 正确! x 被增加一次
   ans = safe(f());     // 正确! f() 被调用一次
}

可以进一步研究的问题:内联的缺点有哪些?

(2012-09-18)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值