什么是内联函数,C 内联函数到底是做什么的?

发布于 科技 2024-02-05
12个回答
  1. 匿名用户2024-01-25

    在计算机科学中,内联函数(有时称为函数或编译时函数)是一种编程语言结构,它建议编译器内联扩展某些特定函数(有时称为扩展)。

    内联扩展是一种特殊方法,旨在消除调用函数的固有时间成本。 它通常用于可以快速执行的函数,因为在这种情况下函数调用的时间消耗比较突出。 这种方法对于非常小的函数也具有空间优势,并且还使其他一些优化成为可能。

    如果没有内联函数,程序员很难控制哪些函数是内联的,哪些不是内联的; 由编译器决定是否内联。 再加上这种控制维度,应用程序特定的知识(例如函数的执行频率)用于选择要内联的函数。

    此外,在某些语言中,内联函数与编译后的模型密切相关:例如,在 C++ 中,必须在使用它的每个模块中定义一个内联函数; 相应地,必须在单个模块中定义正常功能。 这允许模块编译独立于其他模块。

  2. 匿名用户2024-01-24

    1. 内联函数的意义。

    内联函数是用内联关键字修饰的函数。

    类中定义的函数默认为内联函数。 内联函数具有源层函数的结构,但编译后不具有函数的属性。

    内联函数不是在调用时进行控制移位,而是在每次调用的编译时嵌入函数体。 在编译时,与宏替换类似,函数体用于替换调用时的函数名称。

    一般用内联修饰在**中,但能不能形成内联函数,就要看编译器对函数定义的具体处理了。

    第二,内联函数的主要作用。

    内联函数是一种编译机制,优点从**中看不出来,但是在程序的执行效率上存在差异,通常,编译器对函数调用的处理是一种类似中断的方式。

    也就是说,在执行函数调用语句时,程序存储了所有当前状态信息,例如CPU所有寄存器的值(其中最重要的一个是指令指针寄存器)。

    那就不用担心大胆地去执行函数的**,执行后再回到原来的位置,恢复原来保存的状态信息,这样就可以继续执行原来的中断指令了。

  3. 匿名用户2024-01-23

    内联函数(有时称为函数或编译时函数)是一种编程语言构造,它建议编译器以内联方式扩展某些特定函数(有时称为扩展)。

    这意味着建议编译器插入指定的函数体并替换调用函数的每个位置(上下文),从而节省每次调用函数的额外时间和费用。

    但是,在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为太多复杂的函数无法内联扩展会导致大量的存储资源消耗。 同样重要的是要注意,递归函数的内联扩展可能会导致某些编译器的无限编译。

  4. 匿名用户2024-01-22

    房东很有意思,我觉得楼上的答案足够“官方”。

    内联函数是牺牲空间以节省函数调用开销的小函数,一般作为比较小的函数使用,即函数内部没有循环、switch 语句等。 内联函数的发明是为了替换 C 语言中的宏,并且由于宏只是简单地替换而没有类型检查,因此它们经常出错,例如:

    #define max(a, b) (a) >b) ?a) :b)

    如果你在**中这样写:

    int a = 5, b = 10;

    int max = max(++a, b);自加两次。

    int max = max(++a, b+10);自我递增一次。

    a 的自增量数由与它相比的数字大小决定!?这当然不是你想要的结果。

    所以最好的办法是:

    template

    inline t max(const t& t1, const t& t2)

    return t1 > t2 ? t1 : t2;

    所以如果你这样写:

    int max = max(a, b);

    事实上,它被替换为:

    int max = a > b ? a : b;

    虽然宏看起来很相似,但它们比宏有更多的类型检查,并且内联函数使用真实函数的特征,而不是模拟函数函数的宏的类似函数。

    内联函数是为经常使用且进程较小的小函数设计的,我说是为了节省函数调用的开销,牺牲空间,内联函数使用不当会造成臃肿,所以使用时一定要小心。

    建议(摘自书中):

    for function-like macros, prefer inline functions to #defines.

    房东有时间多看书,毕竟这里专家不多,也没有多少人有太多的时间精力帮你解决这些基本问题,看几本书,你一定会受益匪浅。

  5. 匿名用户2024-01-21

    符号的左边是类的对象,或结构的对象。

  6. 匿名用户2024-01-20

    编译时不会调用内联函数,编译器会在调用时粘贴内联函数的**(正式调用),这样可以提高效率。

    内联函数只能是一个非常简单的函数,因为如果一个非常大且复杂的函数设置为内联,编译器会自动将该函数设置为非内联。

  7. 匿名用户2024-01-19

    它的运行速度可以稍快一些,但代价是增加长度。

  8. 匿名用户2024-01-18

    它是在堆内存中编译的,直到程序完成才过期,这样可以加快执行速度,效率更高,但内联函数必须很短,否则只会适得其反。

  9. 匿名用户2024-01-17

    对于一个需要多次调用的函数,而且它相对较小。 最好使用内联函数。 相反,如果它是一个大函数,你可以使用宏。

    内联函数实际上提示编译器将相应的 **"内嵌"与宏不同,宏是编译前的简单字符替换。 内联能够执行语法和语义检查。

  10. 匿名用户2024-01-16

    内联对应关系最合适的定义是差值 ()。

    a.函数的主体包含循环语句。

    b.函数的主体包含递归语句。

    c.需要加快程序的执行速度。

    d.函数很多,很少调用。

    无效文件的正确答案:c

  11. 匿名用户2024-01-15

    它的运行速度可以稍快一些,但代价是增加长度。

  12. 匿名用户2024-01-14

    C++ 内联函数通常与类一起使用。 如果函数是内联的,则在编译时,编译器会将函数的副本放在每个函数都调用该函数地方。

    对内联函数的任何修改都需要重新编译该函数的所有客户端,因为编译器需要再次替换所有 **。

    如果要将函数定义为内联函数,则需要在函数名称前面加上关键字 inline,并且需要在调用函数之前定义该函数。 如果函数已在多行上定义,则编译器将忽略内联限定符。

    类定义中定义的函数都是内联的,即使未使用内联说明符也是如此。

相关回答
14个回答2024-02-05

你能说清楚吗,我不知道你的意思。 是否要在 main 函数中调用一个函数,然后不知道如何定义被调用的函数? 如果是这样的话,我可以告诉你。 >>>More

4个回答2024-02-05

函数是否被外部引用不是一成不变的,两者之间没有必然的相关性。 此外,如果某个函数被指定为静态函数,则应在头文件中将其声明为静态函数,否则其他人在使用库时会误用它。

8个回答2024-02-05

主要是编译器的问题,如果你用C语言写,你必须让编译器理解你在写什么,这样它才能把它转换成机器码!!

16个回答2024-02-05

主要操作步骤:使用公式 if(isnumber(find(.)"a",a1)),"是的","没有"),就是这样。 >>>More

22个回答2024-02-05

驾驶执照根据允许驾驶的类型分为以下几类: 大型乘用车A1驾照可驾驶 大型乘用车和B1、B2、C1、C2、C3、C4、M型拖拉机A2可驾驶重型、中型全挂车、半挂车列车和B1、B2、C1、C2、C3、C4、M型 城市客车A3可驾驶10人以上的城市客车和C1, C2、C3、C4 型号 中型乘用车 B1可驾驶 中型乘用车(含核载客量10人以上,载客量少于19人的城市公交车)和C1、C2、C3、C4、M型 大型卡车B2可驾驶 重型和中型卡车和 C1、C2、C3、C4 型号 小型车 C1可以驾驶小型和微型乘用车和C2, C3、C4车型 小型自动车辆 C2可驱动小型微型自动变速器乘用车和轻微型自动变速器卡车 Low-s