c语言函数声明中,static inline和extern inline的区别
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的区别相关推荐
- 七、C语言函数定义详解
文章目录 1.函数的声明和定义 2.函数的调用 3.函数参数的两种传递方式 1.传值调用(C语言默认传递参数方式) 2.引用调用 4.函数的分类 1.内部函数(静态函数) 2.外部函数 1.函数的声明 ...
- c语言函数大全doc,c语言函数大全.doc
c语言函数大全c语言函数大全 getchar,getch 原型:extern int getchar(void); 用法:#include 功能:读键 说明:从键盘上读取一个键,并返回该键的键值 ge ...
- C语言函数内static关键字 疑惑
static关键字有两类使用:函数外使用和和函数内使用,其中函数外使用主要用来限制被修饰的函数或变量作用域为本文件,没什么可多说的,下面重点说一下static关键字在函数体内的用法. 如下面的代码: ...
- 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- java调用wvsc.exe_c语言 函数的调用方法
欢迎加入 编程爱好者 QQ群 群号 57616770 中都只有一个主函数main(), 但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调在第一章中已经介绍过,C源程序是由函数 ...
- Python正则表达式匹配C语言函数
以下python代码主要用于匹配各种类型的C语言函数,使用的为re.search,意味着包含,如果需要完全匹配请用re.match. # coding=utf-8 import re# 匹配函数,包含 ...
- C语言的一个关键字——static
C语言的一个关键字--static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用stati ...
- C/C++中inline/static inline/extern inline的区别及使用
引入内联函数的目的是为了解决程序中函数调用的效率问题,也是用内联函数取代带参宏定义(函数传参比宏更加方便易用) inline关键字用来定义一个类的内联函数. 在类体中和类体外定义成员函数是有区别的:在 ...
- C语言函数指针 和 OC-Block
C语言函数指针 和 OC-Block 一. C语言函数指针 关于函数指针的知识详细可参考: http://www.cnblogs.com/mjios/archive/2013/03/19/296703 ...
最新文章
- 祁阳一中2021年高考成绩查询,祁阳一中2019高考成绩喜报、一本二本上线人数情况...
- 关于第十五届全国大学生智能车竞赛 STC 单片机
- [Java] System.arraycopy 数组复制
- 轻量集群管理工具PSSH
- Cpp / 通用引用、引用折叠与完美转发问题
- python开发mbus程序_Python pywmbus包_程序模块 - PyPI - Python中文网
- 为什么说下一个十年的主战场在Serverless?
- 树莓派教程 - 1.2 树莓派GPIO库wiringPi 软件PWM
- qt中实现息屏开平mousepress_Qt元对象(Meta-Object)系统与反射
- ibatis mysql 配置文件详解_MyBatis配置文件详解
- SpringCloud 中使用 Ribbon(默认轮询规则 + 自定义规则)
- canbus是什么意思_CANBUS是什么意思
- html写了外部样式表,外部样式表怎么写
- C#一种简单处理假死的方法
- 计算机再带word打不开怎么办,Word文档打不开怎么办 Word打开出错的解决办法
- Jenkins企业应用
- oracle分组查询最新的一条
- java如何处理excel的读取
- Android之WebView的使用与简单浏览器
- 《A Survey on Transfer Learning》迁移学习研究综述 翻译
热门文章
- 谷粒商城个人笔记记录
- 深入浅出Spark2.1.0度量系统——Source继承体系
- 网页随处点击出现小火花简约特效 html+css+js
- Redis+Nginx+ 设计模式 +Spring 全家桶 +Dubbo 技术精选合集
- linux优化ssd磁盘,Ubuntu系统SSD硬盘优化全记录
- 成都阳了的人数越来越多了寻找BT QT WW可以来看看了
- 苹果id可以同时用两个手机吗_windows7怎么使用便签?可以和苹果手机一块儿用吗 - 学显...
- jQuery中Ajax事件
- Tomcat调优教程
- 天九共享第51届战略股东联谊会在武汉成功举办