当前位置: 代码迷 >> 驱动开发 >> 一下 static inline 有什么作用
  详细解决方案

一下 static inline 有什么作用

热度:824   发布时间:2016-04-28 10:00:22.0
弱弱的问一下 static inline 有什么作用?
弱弱的问一下 static inline 有什么作用?
1.
uboot的arch\arm\include\asm\arch下的s3c2400.h中:
static inline struct s3c24x0_clock_power *s3c24x0_get_base_clock_power(void)
{
    return (struct s3c24x0_clock_power *)S3C24X0_CLOCK_POWER_BASE;
}
......
中的 static inline 有什么作用呢?

2.
在.h  文件中定义了 static  inline  函数 , 当.c 文件包含(#include)这个 .h 文件后,  在.h 文件中定义的static  inline 函数  也就相当于在 .c 中定义的static inline 函数, 因为.h已经被.c 文件包含了
那uboot的arch\arm\cpu\arm920t\s3c24x0下的speed.c 中
#include <common.h>
#ifdef CONFIG_S3C24X0

#include <asm/io.h>
#include <asm/arch/s3c24x0_cpu.h>

#define MPLL 0
#define UPLL 1
哪一个是包含     arch\arm\include\asm\arch   下的   s3c2400.h       中   static inline   的头文件呢? 还是其它的原因呢??

3.
static inline 是静态的:因为这些函数其实统一接口,大家都需要实现这个接口,如果不用static,那就很有可能重名。编译就会出错了。  这里的接口 指什么呢?? 可以截图看么??
static inline 是内联的:小函数,而是调用的很频繁,用内联会提升很多效率!         那在1. 中可以不指定  XX是内联函数么   ??                                                                                 




本人小白,若有用词不当的地方还请指正,高手勿喷。谢谢!!

------解决思路----------------------
两个关键字,分开来理解
static:静态函数,这也是最基本的语法。包含到不到的源文件中时,每个源文件中相当有一份独立的 static 函数。可以说是说来防重名的,但也不只是这个功能。

inline:内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。可以提高编译效率!
------解决思路----------------------
static 用于修饰函数的时候,意思是此函数只能在此文件中使用,所以static  inline 病不冲突,按字母理解就行了
------解决思路----------------------
如果编译器能正确inline函数的话,static就是多余的,但是如果编译器忽略inline前缀的话,static就是必须的。在vc里面还有个特殊的关键字 __forceinline,在vc上用他就不需要static了
------解决思路----------------------
static 表示函数只在本文件被调用
inline是内联函数,编译的时候会在调用该函数的地方将函数展开,优点是程序运行时省去了函数调用耗费的时间,缺点是占用了空间。
------解决思路----------------------
static  本文调用 防止和外部的函数名字等冲突  隔离作用
inline  预编译会运算   减少最后编译的代码量   减小汇编行数
------解决思路----------------------
头文件里定义的函数,如果不加inline,就会报冲突.inline的意思是函数体在调用的地方直接展开,有点类似宏的意思.但实际上inline只是给编译器一个建议,具体采用不采用编译器自己说了算.使用inline的最实际的好处就是可以在.h文件中定义函数体而不会报冲突.

static较少见在.h里面使用,一般都是在.cpp文件里面使用,表示这个函数名或者变量名只有在这个文件范围内才有效.
  相关解决方案