首页 > 其他分享 >c语言函数声明中,static inline和extern inline的区别

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

时间:2022-11-15 17:45:25浏览次数:67  
标签:函数 编译器 static 内联 extern inline

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

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

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

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

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

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

标签:函数,编译器,static,内联,extern,inline
From: https://www.cnblogs.com/amxiang/p/16893235.html

相关文章

  • static inline
    我们知道一般的函数调用都会通过call的方式来调用,hacker很容易对一个函数做手脚,如果是以inline的方式编译的,会把该函数的code拷贝到每次调用该函数的地方;而static会让生成......
  • C语言inline关键字
    一、inline关键字的概念inline关键字是C99标准的型关键字,其作用是将函数展开,把函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、......
  • static关键字
    static关键字static:静态的static可以用来修饰:属性、方法、代码块、内部类使用static修饰属性:静态变量(或类变量)属性,按是否使用static修饰,又分为:静态属性vs非静态属......
  • c++中尽量用const,enum,inline替换#define
    一般声明在头文件,注意:在class中声明常量通常要加static例:classA {public:staticconstinta=0;} 对于单纯的常量,最好以const或enums替换#define......
  • 小程序报错:[渲染层网络层错误] Failed to load local image resource /static/logo.pn
    问题来源我在刚开发微信小程序时发现了一个问题,当我用hbuilderx运行小程序到微信开发者工具中时,出现了报错。报错后并且也出不来图片,当时也去百度了许多用法,发现大多数......
  • Apache BookKeeper Insights Part 1 — External Consensus and Dynamic Membership
    标题:ApacheBookKeeperInsightsPart1—ExternalConsensusandDynamicMembership原文:https://medium.com/splunk-maas/apache-bookkeeper-insights-part-1-externa......
  • Specific static library / shared library / header path on OSX
    StaticlibrarypathexportLIBRARY_PATH="/usr/local/lib"SharedlibraryordynamiclibrarypathexportDYLD_LIBRARY_PATH="/usr/local/lib"Headerfilepathex......
  • SAP 电商云 Spartacus UI External Route 的模块实现概述
    我们在SAPSpartacusAppModule里进行如下的ExternalRoute配置之后:provideConfig({routing:{internal:['/**','!/car......
  • java——静态static关键字001
    stataic关键字概述:           static关键字修饰成员变量:              static关键字修饰成员方法:    ......
  • static 关键字
    静态变量(类变量)、静态方法(类方法):static声明的属性或方法。静态变量/静态方法生命周期和类相同,在整个程序执行期间都有效。它有如下特点:为该类的公用变量,属于类,......