欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-23 14:03:22
...

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

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

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

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

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