代码编织梦想

一、inline关键字的概念

inline关键字是C99标准的型关键字,其作用是将函数展开,吧函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。

二、inline关键字实例

在编写程序过程中,对于短小而且需要频繁调用的函数,可以将其声明为inline()函数。在调用该函数的过程中编译器会自动选择是否展开该函数。下面实例模拟了一个inline函数的展开。注意,这只是一个原理性的实现方式,具体的展开会因编译器的不同而不同:

#include <stdio.h>

//声明一个inline()函数add,执行两个数据的加法,返回两个数据的和
inline int f(int a, int b);

int main(void)
{
  int c;
  //调用inline函数,这部分内容在inline函数展开时会被add函数的代码所取代
  c = f(1, 2);
  printf("add : %d\n", c);
  return 0;
}

int f(int a, int b)
{
  return a + b;
}

inline函数的展开通常是在汇编阶段开始的。使用gcc编译器的“-S”选项可以观察源文件编译后的汇编代码。

三、inline关键字使用总结

使用inline关键字可以使程序的执行效率更高,同时是代码更紧凑。但是并不是所有的函数都可以将其声明为inline函数,因此使用inline函数还应注意一下几个问题:

  • 函数的展开是由编译器来决定的,这一点对程序员是透明的
  • 只有在代码很短的情况下,函数才会被展开。递归函数是不会被展开的。

inline函数在某种程度上来讲很像带参数的宏,例如对于上述两个数的求和操作,也可以定义为宏:

#define add(a, b, c)  c = a + b

虽然inline函数和带参数的宏很像,但是在使用方法上和宏还是有很大区别的:

 inline()函数带参数的宏
展开的时机在编译的时候展开,因此inline关键字是一个编译关键字在预处理时展开,因此#define关键字是一个预处理关键字
参数类型检查inline()函数是一中函数,会进行严格的参数类型检查不会检查参数类型,只是做简单的字符串替换,因此在使用带参数的宏时会有一些副作用,编写程序是要人为预防
是否允许有复杂语句不允许出现复杂语句,如果出现复杂语句,该函数将不会展开,例如递归,大型循环等对此不做要求。宏只是做字符串替换操作,而不了解语句的含义
是否一定被展开不一定,是否展开由编译器决定一定,只要使用了宏就可以保证被展开

 

转载于:https://my.oschina.net/daowuming/blog/774699

9月4日课后笔记-爱代码爱编程

9月4日课后笔记 不定长参数 # 定义一个函数 来求任意数的和 # def s(a,b,c): # # print(a + b + c) # # s(1,2) # TypeError: s() takes 2 positional arguments but 3 were given def s(*a): # 定义一个变量来保存

做题时对知识点的查漏补缺-爱代码爱编程

1.IP地址分类?(A,B,C,D类) 2.c++异常处理? try...catch 语句的执行过程是: 执行 try 块中的语句,如果执行的过程中没有异常拋出,那么执行完后就执行最后一个 catch 块后面的语句,所有 catch 块中的语句都不会被执行;如果 try 块执行的过程中拋出了异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的

C语言-inline关键字-爱代码爱编程

By: Ailson Jack Date: 2021.03.14 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/131.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。 1.基本概念 C语言中的inline关键字是C99标准

c语言inline有什么作用,C语言inline关键字-爱代码爱编程

一、inline关键字的概念 inline关键字是C99标准的型关键字,其作用是将函数展开,吧函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。 二、inline关键字实例 在编写程序过程中,对于短小而且需要频繁调用的函数,可以将其声明为inlin

C++ Inline关键字-爱代码爱编程

原创文章,转载请注明出处。 C++ Inline记录 前言1>inline 函数工作原理2>inline 函数作用2.1>消除函数调用的开销宏定义(define)和内联函数(inline)的区别1>内联函数是在编译时展开,而宏在编译预处理时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。

inline关键字-爱代码爱编程

作用 inline是一个关键字,可以用于定义内联函数,像普通函数一样被调用,但是在调用时并不通过函数的调用机制,而是直接在调用点展开,这项可以大大减少由函数调用带来的开销,从而提高程序的运行效率特征 相当于把内联函数里面的内容写在调用内联函数处 相当于不用执行进入函数的步骤,直接执行函数体 相当于宏,却比宏多了类型检查,真正具有函数特性 编译器一般不内联包

关键字inline的使用-爱代码爱编程

通识 构造函数和析构函数都是inline函数; inline函数在调用时,程序不会跳到另一个位置执行代码,然后再跳回来。所以内联函数的运行速度比常规函数快,但是需要占用更多的内存; 一些频繁调用的代码量小的函数可以写成inline函数,避免了频繁调用函数对栈内存重复开辟所带来的消耗; inline和宏的区别 内联函数在编译时展开,而宏在预编译时展开;

内联函数详解-爱代码爱编程

为什么要有内联函数 在学习内联函数之前,大家可以写一个实现加法的宏ADD(),检测一下自己。 如果对宏等预编译知识不太熟悉的话,可以先看一下这篇文章:预编译——2.2.4 以下是一个正确的ADD宏: #define ADD(x,y) ((x)+(y)) 灵魂三问: 你在 x 和 y 前面加类型了吗? x 和 y 都加括号了吗?

c语言关键字之inline_努力奔跑的小龟的博客-爱代码爱编程

简介 inline放在函数返回类型前修饰函数,被修饰的函数就叫做内联函数。 static inline void function(void) 在C语言中,函数调用时保存现场,函数中变量的使用等都会占用栈空间。而且进入函数前的保存现场,跟函数调用结束后的恢复现场都需要时间花销。 当函数的调用代价大于直接将代码拷贝到运行程序中时,我们就会使用inl