为什么__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,能力防止这个问题。