Inline 内联函数

Inline函数,即内联函数,它是把函数内部的代码直接插入到调用者代码处的函数,也就是该函数不是通过子函数调用这种常见的方式来实现的,而是直接替换到函数调用处(这点上有点类似#define宏),由此带来的优势就是省去了调用/返回指令,通过避免调用带来的开销(包括函数调用带来的额外的执行周期和堆栈的使用)来提高代码的执行效率,而又同时保留了函数封装形式带来的可读性,很好用吧有木有,下面就让我们看看具体的使用形式:

/****************函数声明部分*****************/

void delay(void);//delay函数声明,此处不用加Inline关键词

void main(void)

{

/***************Insert your code in the following***************/

EnableInterrupts;

while(1)

{

testPoint = 0;

delay();//定义了inline的delay函数,在编译连接的时候就会直接嵌入到该行代码处,而不是通过调用实现

}

}

/**注意关键字inline 必须与函数定义体放在一起才能使函数成为内联,将inline 放在函数声明前面不起任何作用**/

inline void delay(void)

{

uint8 i=0;

while((i++)!=200);

}

上面就是我们使用inline内联函数的方法,很简单却很管用,不过inline内联函数内部不能用复杂的运算,这算是一个限制了吧,不然岂不是都争抢着用了,呵呵。另外可能还有人会问,既然Inline函数与#define宏的功能类似,那为什么不用#define宏呢,我的回答只能说是用inline更快且不容易出错,至于具体原因有兴趣的博友可以google一下,俺就不多说了。。。

时间: 2024-12-23 12:18:20

Inline 内联函数的相关文章

c++——inline内联函数

1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3; ? #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!) C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数 内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求. //宏替换和函数调用区别 #include "iostream" using namespace

(inline)内联函数在IOS开发中的使用

今天在阅读YYKit源码(https://github.com/ibireme/YYKit.git)时发现在YYKitMacro.h组件中大量使用的内联函数,例如此文件中的一个函数 static inline void dispatch_async_on_main_queue(void (^block)()) { if (pthread_main_np()) { block(); } else { dispatch_async(dispatch_get_main_queue(), block);

【转】inline内联函数

技术类笔试题50%都会问宏与inline的区别,自己去找找看? 1)宏替换发生在预编译 2)宏函数(如果可以这么叫的话)替换时不会检查参数,inline函数会检查 3)宏一定会发生替换,inline貌似不是强制的,编译器想不替换也没关系 4)宏替换时存在着一些不可避免的陷阱(参见C Traps and Pitfalls),例如传参时如果传了a++之类的可能会出错,inline就比较安全了. 宏有副作用,比如MAX(x++,y++) inline会不同, 慎用内联内联能提高函数的执行效率,为什么不

inline内联函数

body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(

C++ inline内联函数

内联函数 函数调用是有时间和空间开销的.程序在执行一个函数之前需要将实参.局部变量.返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码:执行完之后,还要将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码. 如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略:如果函数只有一两句语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就不容忽视. 为了消除函数调用的时空开销,C++在编译时将函数调用处用函数体替换,即内联函数. 注意:要在函数定义出

内联函数 inline 漫谈

内联函数存在的结论是: 引入内联函数是为了解决函数调用效率的问题 由于函数之间的调用,会从一个内存地址调到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址.函数调用会有一定的时间开销,引入内联函数就是为了解决这一问题. 不用inline修饰的函数, 汇编时会出现 call 指令.调用call指令就是就需要: (1)将下一条指令的所在地址入栈 (2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序). 原因 因为调用函数实际上将程序执行顺序转移到函数所存放在内存

iOS OC内联函数 inline的详解

inline 在iOS中的一些框架中,static inline是经常出现的关键字组合. static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A.不会导致重名的错误. inline.内联函数. 作用:替代宏. (如果你在看框架时,看到inline不解,搜索到这篇文章,看到这里可以不用看下面的详述了) 在框架中出现inline时,如YYKit框架.我们稍加观察就会发现它出现在.h文件中. such as: static inline CGFlo

内联函数与虚函数

如果函数已经被声明为inline, 内联函数已经在编译期间它的调用点上就被展开; 而虚拟函数调用的决定则要等到运行时刻在执行程序内部的每个调用点上系统根据被调用对象的实际基类或派生类的类型来决定选择哪一个虚拟函数实例. 内联不是强制性的,你只是向编译器提出这个建议,允许它在可以内联的时候采取内联形式.而虚函数本身就是一个函数,只是在多态的情况下,它要到执行时才能确定调用的函数,所以这样的特性阻止了虚函数的内联.但,要注意,只是在多态的情况下(多态不用我解释吧).如果是静态的调用,编译器还是会采用

C++_inline内联函数

inline内联函数可以实现在调用函数的地方拷贝代码副本,从而避免了函数调用跳转等存在的时间上耗时稍长的问题. (inline 要写在函数 定义 与 声明 之前,如 inline double square(double);      inline double square(double x){return x*x;}) 内联函数的使用前提: 1.代码段比较小 2.且函数调用频繁的代码可以使用内联函数,内联函数安全性比宏函数更好. 不会出现语义上的问题,而宏函数会出现语义上的问题(尤其对于自增