标题:
C语言static inline定义函数的意义?
[打印本页]
作者:
hxdby
时间:
2022-4-23 00:29
标题:
C语言static inline定义函数的意义?
最近在看Atmel官方库文件时,发现在他的.h头文件中,有大量static inline这样的方式定义函数,有几个疑问,
1,不是说不能在头文件中定义函数吗,只能声明吗?为什么能用这种方式在头文件中定义函数
2,函数前加上static不是表示静态吗,为什么这些函数我还能在其他源文件中引用呢?
3,官方static inline这样定义有什么好处?
大概是如下这种形式:
#ifndef ATMEL_START_PINS_H_INCLUDED
#define ATMEL_START_PINS_H_INCLUDED
#include <port.h>
static inline void sum_set_pull_mode(const enum port_pull_mode pull_mode)
{
PORTB_set_pin_pull_mode(0, pull_mode);
}
static inline void sum_set_dir(const enum port_dir dir)
{
PORTB_set_pin_dir(0, dir);
}
作者:
HUNTER2022
时间:
2022-4-23 11:33
以下内容与楼主讨论,待各位大佬判断。 1.头文件可以定义函数,一般情况下不推荐而已。头文件的内容将在预处理是被加入.c文件,形成比较长的文本源程序。在操作中,将较短的函数直接定义在头文件中挺常见。 2.函数的默认作用域为全局,所以我们可以通过引入.h文件调用其它.c文件定义的函数。静态函数的作用域是本.c文件,如引入的.h文件中的函数名称在其它.c文件中以static修饰,其实是用不了的。 在本例中,引入带有静态函数的.h文件的.c文件将在预处理环节把函数定义加入到.c文件中,这保证了对该函数的访问。从这一点上,还真得把函数体写在一起。 这样的优点在于保证了对函数的访问,且避免了未引用该函数对其的访问。特别是,inline关键字将把这个函数的代码与.c本身代码写在一起,避免写到另一个内存区域。 3.官方这么定义,觉得是为了保证该函数的改善运行效率。似乎这是现内嵌编译并避免外部同名调用的唯一方法。
作者:
Hephaestus
时间:
2022-4-23 13:46
1)在h文件中定义函数只是不推荐,但是并不违反语法。
2)static函数是不能在其他文件里面引用,但是每个文件都有自己的static函数,当然可以引用自己的那个。
3)inline函数是直接展开,没有调用。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1