c语言函数声明中,static inline和extern inline的区别

  • “extern”关键字对于普通函数没有作用
  • “extern”和“static”能影响编译器对内联函数的处理

“extern”关键字对于普通函数没有作用

extern在修饰变量和函数声明时的作用是表示:这个东西不在当前的编译单元中,只需要它的声明即可。链接时,链接器会去其它编译单元以及其它库中寻找它的定义。
而函数默认就是extern的。所以当你看到像下面这样的代码时,很可能写代码的人不知道自己在干什么:

// useless “extern”
extern void function();

“extern”和“static”能影响编译器对内联函数的处理

但是对于内联函数来说,情况就有了一些变化:
inline关键字是对编译器的内联建议。编译器会根据实际情况决定是否内联当前函数是否内联。
当一个内联函数同时也是extern函数时,如果编译器决定内联这个函数,那么没什么问题;如果编译器决定不内联这个函数,它就会给这个函数创建常规且唯一的函数实现,并且所有其他不内联的调用点都将调用这个实现。
当一个内联函数同时也是static函数时,如果编译器决定内联这个函数,那么同样也是没什么问题的;如果编译器决定不内联这个函数,那么在当前的编译单元里,这个函数就跟static函数一样,就会创建一个当前编译单元唯一的函数实现,所有当前编译单元的函数调用,都会指向这个实现。

c语言函数声明中,static inline和extern inline的区别相关推荐

  1. 七、C语言函数定义详解

    文章目录 1.函数的声明和定义 2.函数的调用 3.函数参数的两种传递方式 1.传值调用(C语言默认传递参数方式) 2.引用调用 4.函数的分类 1.内部函数(静态函数) 2.外部函数 1.函数的声明 ...

  2. c语言函数大全doc,c语言函数大全.doc

    c语言函数大全c语言函数大全 getchar,getch 原型:extern int getchar(void); 用法:#include 功能:读键 说明:从键盘上读取一个键,并返回该键的键值 ge ...

  3. C语言函数内static关键字 疑惑

    static关键字有两类使用:函数外使用和和函数内使用,其中函数外使用主要用来限制被修饰的函数或变量作用域为本文件,没什么可多说的,下面重点说一下static关键字在函数体内的用法. 如下面的代码: ...

  4. 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  5. java调用wvsc.exe_c语言 函数的调用方法

    欢迎加入 编程爱好者 QQ群 群号 57616770 中都只有一个主函数main(), 但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调在第一章中已经介绍过,C源程序是由函数 ...

  6. Python正则表达式匹配C语言函数

    以下python代码主要用于匹配各种类型的C语言函数,使用的为re.search,意味着包含,如果需要完全匹配请用re.match. # coding=utf-8 import re# 匹配函数,包含 ...

  7. C语言的一个关键字——static

    C语言的一个关键字--static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用stati ...

  8. C/C++中inline/static inline/extern inline的区别及使用

    引入内联函数的目的是为了解决程序中函数调用的效率问题,也是用内联函数取代带参宏定义(函数传参比宏更加方便易用) inline关键字用来定义一个类的内联函数. 在类体中和类体外定义成员函数是有区别的:在 ...

  9. C语言函数指针 和 OC-Block

    C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考: http://www.cnblogs.com/mjios/archive/2013/03/19/296703 ...

最新文章

  1. 祁阳一中2021年高考成绩查询,祁阳一中2019高考成绩喜报、一本二本上线人数情况...
  2. 关于第十五届全国大学生智能车竞赛 STC 单片机
  3. [Java] System.arraycopy 数组复制
  4. 轻量集群管理工具PSSH
  5. Cpp / 通用引用、引用折叠与完美转发问题
  6. python开发mbus程序_Python pywmbus包_程序模块 - PyPI - Python中文网
  7. 为什么说下一个十年的主战场在Serverless?
  8. 树莓派教程 - 1.2 树莓派GPIO库wiringPi 软件PWM
  9. qt中实现息屏开平mousepress_Qt元对象(Meta-Object)系统与反射
  10. ibatis mysql 配置文件详解_MyBatis配置文件详解
  11. SpringCloud 中使用 Ribbon(默认轮询规则 + 自定义规则)
  12. canbus是什么意思_CANBUS是什么意思
  13. html写了外部样式表,外部样式表怎么写
  14. C#一种简单处理假死的方法
  15. 计算机再带word打不开怎么办,Word文档打不开怎么办 Word打开出错的解决办法
  16. Jenkins企业应用
  17. oracle分组查询最新的一条
  18. java如何处理excel的读取
  19. Android之WebView的使用与简单浏览器
  20. 《A Survey on Transfer Learning》迁移学习研究综述 翻译

热门文章

  1. 谷粒商城个人笔记记录
  2. 深入浅出Spark2.1.0度量系统——Source继承体系
  3. 网页随处点击出现小火花简约特效 html+css+js
  4. Redis+Nginx+ 设计模式 +Spring 全家桶 +Dubbo 技术精选合集
  5. linux优化ssd磁盘,Ubuntu系统SSD硬盘优化全记录
  6. 成都阳了的人数越来越多了寻找BT QT WW可以来看看了
  7. 苹果id可以同时用两个手机吗_windows7怎么使用便签?可以和苹果手机一块儿用吗 - 学显...
  8. jQuery中Ajax事件
  9. Tomcat调优教程
  10. 天九共享第51届战略股东联谊会在武汉成功举办