相关的知识点:内联函数,static关键字

在一次stm32的库代码分析中发现static __inline 的函数定义,对此有些疑惑,static和inline两个关键字为什么要进行连用呢?

对此进行分析和搜索资料,从而进行了整理。

首先,该定义是位于cmsis_armcc.h中

一般使用在函数的修饰中,这些被__STATIC_INLINE修饰的函数一般都位于头文件中,然后被其他的函数进行调用。

这个函数定义在xxx_ll_dma.h的头文件中。



目前网络上的观点是:

static __ inline中,真实起作用的只有__ inline 而static只是提升程序的健壮性。

那么这两个关键字起的作用是什么呢?

对于内联函数,开发者只是起到建议的作用,也就是说,即使是使用了 inline 这个关键字,编译器也不一定是把这个函数当成内联函数来操作,而是编译器根据决策树来进行判断,是否要进行内联,那么问题来了,如果将一个内联函数定义在头文件里,被多个c文件包含,但是 编译器经过决策后,认为这个函数不适合内联,那么就会造成一个问题,即在多个c文件中重复定义,从而产生问题,但是如果使用了static关键字,就可以将其限制在每一个c文件里,让它成为单独的一个内部函数。

注意:__STATIC_FORCEINLINE 也不能强制编译器进行内联,只是会增大内联的概率。

参考链接:

c语言头文件中定义inline static相关函数的优劣

详解static inline关键字

关于armcc中static __inline修饰符的记录的更多相关文章

  1. Javase部分回顾(static (静态修饰符),修饰方法,单利的设计模式, 封装)

    static (静态修饰符)        1.修饰成员变量        静态变量的访问方式:            方式一 : 通过对象访问.                对象.变量名      ...

  2. [.net 面向对象编程基础] (8) 基础中的基础——修饰符

    [.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...

  3. java中的类修饰符、成员变量修饰符、方法修饰符。

    类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类. abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. fin ...

  4. 详解Java中的访问控制修饰符(public, protected, default, private)

    Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获 ...

  5. C# 中的sealed修饰符学习

    转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...

  6. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  7. Java学习笔记十九:Java中的访问控制修饰符

    Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...

  8. 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

    1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...

  9. C# static readonly 修饰符初始化变量

    同事问了一个问题,readonly和static啥区别? 我就写了个demo运行了下: /*** * 验证初始化次数:static只初始化一次,无论多少用户访问,在内存中只有一份 * readonly ...

  10. php中的访问修饰符 private、protected、public的作用范围

    1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...

随机推荐

  1. C++设计模式 - 门面模式(Facade)

    接口隔离模式 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案. 典型模式 Facade P ...

  2. 22 axios和axios拦截器

    1. axios 由于jquery有严重的地狱回调逻辑. 再加上jquery的性能逐年跟不上市场节奏. 很多前端工程师采用axios来发送ajax. 相比jquery. axios更加灵活. 且容易使 ...

  3. Git 教程:解密 .gitignore 文件、合并分支、解决冲突、及 Git 帮助

    Git 帮助 如果你忘记了命令或命令的选项,你可以使用 Git 帮助. 在命令行中,有几种不同的使用帮助命令的方式: git command -help - 查看特定命令的所有可用选项 git hel ...

  4. react native 0.73 配置 react-native-fs

    安装react-native-fs npm npm install react-native-fs --save yarn yarn add react-native-fs 安卓配置 android/ ...

  5. 【6】Spring JavaConfig和常见Annotation

    Java 5 的推出,加上当年基于纯 Java Annotation 的依赖注入框架 Guice 的出现,使得 Spring 框架及其社区也"顺应民意",推出并持续完善了基于 Ja ...

  6. mysql 必知必会整理—游标[十四]

    前言 简单介绍一下游标. 正文 需要MySQL 5 MySQL 5添加了对游标的支持,因此,本章内容适用于MySQL 5及以后的版本. 有时,需要在检索出来的行中前进或后退一行或多行.这就是使用游标的 ...

  7. 如何使用Plotly和Dash进行数据可视化

    本文分享自华为云社区<从数据到部署使用Plotly和Dash实现数据可视化与生产环境部署>,作者: 柠檬味拥抱. 数据可视化是数据分析中至关重要的一环,它能够帮助我们更直观地理解数据并发现 ...

  8. 顺通鞋业ERP管理系统

    鞋业管理软件/鞋业管理系统/鞋业管理云平台 顺通鞋业ERP进销存系统拥有订货管理.销售管理.财务管理.产品管理.库存管理.客户管理.员工管理.查询统计等功能.顺通鞋业ERP进销存系统在管理信息系统业务 ...

  9. CF1535F String Distance

    \(CF1535F\ \ String\ Distance\) 题意 给 \(n\) 个长度均为 \(len\) 的字符串 \(T_1,T_2,\dots T_n\),定义 \(f(a,b)\) 为将 ...

  10. ESXI 6.5 零基础从安装到批量生成/管理虚拟机简易教程

    制造U盘安装盘 1 先提前下载好,ESXI 6.5 ISO文件. 2 下载制作U盘安装工具,RUFUS. Rufus非常小巧的绿色EXE文件,默认配置选中ISO文件就可以,点击开始,就自动制作,非常方 ...