关于c:为什么INLINE-一般要加static

为什么__INLINE 个别要加static
起因如下:
开发者决定不了一个函数是否被内联,开发者只有建议权,只有编译器具备决定权。
上面,咱们来看看一个被static inline润饰的非内联函数:

static __inline int Fake_StaticInline_Add(int n1,int n2,int n3,int n4,int n5)
{
/只是为了多凑几条指令/

n1++;n1++;n1++;n1++;n1++;n1++;n1++;n1++;n1++;n1++;n1++;
return (n1+n2+n3+n4+n5);;

}
这个函数咱们把他放在main.c中,并在main函数这样调用:i = Fake_StaticInline_Add(6,6,6,6,6);。当初咱们来看看他的反汇编代码:

MOVS r0,#5

    MOV      r3,r0
    MOV      r2,r0
    MOV      r1,r0
    STR      r0,[sp,#0]
    BL       Fake_StaticInline_Add
    MOV      r4,r0
    NOP

惊不惊喜,意不意外? 这个函数竟然是被调用了的,而并没有被内联到调用它的中央。那么,为什么这个函数没变成内联函数呢?
我推断是因为我在这个函数中写入了太多指令,编译器判断如果它变成内联函数,会极大占用空间,所以不将它编译成内联函数。
但你还记得咱们之前把Inline_Add函数放在哪里吗?放在了一个头文件。试想,如果这个Inline_Add在没有被编译成内联函数的状况下,被include到了多个源文件中,势必会产生函数反复定义的问题。 因而,咱们要再加一个关键字static,能力防止这个问题。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理