关于内联函数(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)
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)
相关文章推荐
- Kotlin中关于内联函数的一些理解分享
- 运维笔记4(用户信息涉及到的文件,用户管理命令,用户权限的下放,更新:关于useradd -b -d -m -k的一些理解和使用)
- 关于引用的一些理解
- 关于redis的一些简单理解和应用
- 对关于字符驱动的一些重要数据结构(file_operations, file, inode, cdev)的理解
- 关于sizeof运算符的一些理解
- 关于函数指针数组和函数指针数组的指针的一些理解
- 关于EBS七层组织架构的一些理解
- 关于Http协议与TCP协议的一些简单理解
- 关于MVC的一些理解
- 关于卷积神经网络该如何理解的一些思考
- 【原创】关于操作符重载的一些个人理解
- 关于margin重叠的一些理解
- 关于python编码的一些理解
- C++关于内联函数的一些思考
- 关于sql和mysql对于别名不能调用的一些理解
- iPhone开发关于UDID和UUID的一些理解
- 关于hibernate的关系映射的问题一些理解和笔记
- 关于服务业革命的一些理解和看法
- 关于Git的一些理解