C++05(内联函数、C/C++的相互调用)

1.inline内联函数

inline关键字加上:不生成符号定义了
inline:编译阶段
调用点---->直接代码展开

1.1inline函数和宏有什么区别?

1.inline函数在编译阶段处理:有类型检查和安全检查,安全
2.宏:在与便于阶段,直接文本替换,不安全
内联函数可以理解为:更安全的宏

1.2inline函数和static修饰的函数有什么区别

1.inline直接代码展开,没有开栈和清栈的开销,不生成符号导致---->本文件可见
2.static有开栈和清栈的开销,生成符号,只是global–>local 变成了只有当前文件可见
(所有文件只分为global和local,global整个项目下,全部文件可见,local只有本文件可见)

1.3为什么不把所有函数默认处理成inline

inline函数,直接代码展开,没有开栈和清栈的开销,效率高,那为什么不把所有函数默认处理成inline?
inline函数的缺陷:
以代码膨胀为代价(以空间换时间),如果设置不恰当,空间占用率高,而且效率也不高。
inline使用建议:
1.函数执行的开销 < 函数开栈清栈的开销--------->建议
2.函数执行的开销 >> 函数开栈清栈的开销 ----->不建议

1.4内联的限制

1.只在release版本生效
2.inline只是给编译器的一个建议,具体处不处理,是编译器来决定的

  • 哪些函数,编译器是一定不会设置为内联的?
    1>.递归。因为编译器不知道应该展开多少次
    2>.for while循环。
    3>.switch分支。
    3.inline是基于实现的,不是基于声明的。(要设计在定义点,而不是声明点)
    4.inline的实现应该写在头文件中,不要放在源文件中

2.C/C++的相互调用

extern “C”
{
CODE-LIST
}
CODE-LIST ----->处理方式以c的规则来处理

1.C++中调用C函数(extern “C”)
2.C语言中调用C++(向前兼容,把c++中的定义点设置为以C处理)
无论是哪种情况,都在C++文件中,将规则点(定义点/声明点)设置为以C处理

  • 如果不允许改变c++源文件怎么办?
    加个中间层,如下图:在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值