您的位置:首页 > 其它

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

2012-09-18 23:53 260 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: