内联函数(inline function)那些事

                                                                                 内联函数(inline)

内联函数对于一般的人来说,没什么可讲的,就那么回事(反正就有那种说不清的感觉)。有这种想法的人似乎和我一样都是菜鸟级别的吧!

今天看到一个面试题:

讲一下内联函数的含义:(面试题)
将以下代码改为C语言代码,要求在.c文件中能编译通过(要提交.c文件)
 

/*
将以下代码改为C语言代码,要求在.c文件中能编译通过(要提交.c文件)
*/
#include<iostream>

using namespace std;

inline float max(float c1, float c2)
{
    return c1 > c2 ? c1 : c2;
}


int main()
{
    cout << "请输入2个浮点数:";
    float c1 = 0.0f; 
    float c2 = 0.0f;
    cin >> c1 >> c2;
    cout << max(c1, c2) << endl;

    return 0;
}

呃呃这要怎么讲???从哪里讲,脑子里有东西,但是说不清。(在我这里说不清就是不会)

因此再一次学习inline函数,到网上查资料,有收获。

【参考:内联函数维基百科

在计算机科学中,内联函数(有时称作在线函数编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。

接下来就从维基百科的定义中找到答案。

1)内联函数(有时称作在线函数编译时期展开函数

这句话的信息量非常大,首先内联函数就是编译时期展开函数。(他说出了内联函数的作用时机,以及他的作用形式)

作用时机---------------------------------编译时。

作用形式--------------------------------展开函数(将函数展开)。

注意:编译原理

创建一个可执行的目标程序:一般分为经历一下4个过程。

一个语言处理系统​​​

2)也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方

内联实质--------------------------------函数替换

注意:

建议-------------------------------------虽然程序员将函数申请为Inline函数,但是是否真正成为inline函数,不一定。               

函数体----------------------------------上面提到的是将函数体插入到调用该函数的地方,是函数体,体体体,重要的事情说三遍。

 

内联函数的函数体替换

 

 

3)c++引入内联函数的目的

节省了每次调用函数带来的额外时间开支。

 

4)尽量用inline、const、enum替换 #define

尽量用编译器替换预处理。

a)#define宏预处理阶段进行粗暴替换,不进行语法检查,而inline函数是在编译器阶段进行的替换,接受语法,语义的检查。相对更安全。#define 的错误一般很难最查到。

 

总结:通过以上对内联函数(inline function)的讲解,是否心中已经有了上面面试提的答案了呢。

#include<iostream>

using namespace std;

//inline float max(float c1, float c2)
//{
//    return c1 > c2 ? c1 : c2;
//}

#define max(x,y) (x > y ? x : y)

int main()
{
    cout << "请输入2个浮点数:";
    float c1 = 0.0f; 
    float c2 = 0.0f;
    cin >> c1 >> c2;
    cout << max(c1, c2) << endl;

    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值