找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 795|回复: 2
打印 上一主题 下一主题
收起左侧

C语言static inline定义函数的意义?

[复制链接]
跳转到指定楼层
楼主
ID:997026 发表于 2022-4-23 00:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在看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);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:970221 发表于 2022-4-23 11:33 来自手机 | 只看该作者
以下内容与楼主讨论,待各位大佬判断。 1.头文件可以定义函数,一般情况下不推荐而已。头文件的内容将在预处理是被加入.c文件,形成比较长的文本源程序。在操作中,将较短的函数直接定义在头文件中挺常见。 2.函数的默认作用域为全局,所以我们可以通过引入.h文件调用其它.c文件定义的函数。静态函数的作用域是本.c文件,如引入的.h文件中的函数名称在其它.c文件中以static修饰,其实是用不了的。 在本例中,引入带有静态函数的.h文件的.c文件将在预处理环节把函数定义加入到.c文件中,这保证了对该函数的访问。从这一点上,还真得把函数体写在一起。 这样的优点在于保证了对函数的访问,且避免了未引用该函数对其的访问。特别是,inline关键字将把这个函数的代码与.c本身代码写在一起,避免写到另一个内存区域。 3.官方这么定义,觉得是为了保证该函数的改善运行效率。似乎这是现内嵌编译并避免外部同名调用的唯一方法。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:883242 发表于 2022-4-23 13:46 | 只看该作者
1)在h文件中定义函数只是不推荐,但是并不违反语法。

2)static函数是不能在其他文件里面引用,但是每个文件都有自己的static函数,当然可以引用自己的那个。

3)inline函数是直接展开,没有调用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表