c语言: inline(gcc)
从汇编的角度看inline函数与非inline函数 http://blog.csdn.net/cxmanzhao/article/details/6801786
强制内联和强制不内联 http://blog.csdn.net/hanchaoman/article/details/7270341
inline - noinline http://blog.sina.com.cn/s/blog_61b5fb9c0100ud55.html
static inline int foo(int a)//这个函数大部分表现和普通的static函数一样,只不过在调用这种函数的时候,gcc会在其调用处将其汇编码展开编译而不为这个函数生成独立的 汇编码。除了以下几种情况外:i 函数的地址被使用的时候。如通过函数指针对函数进行了间接调用。这种情况下就不得不为static inline函数生成独立的汇编码,否则它没有自> 己的地址。ii 其他一些无法展开的情况,比如函数本身有递归调用自身的行为等。 //extern inline int foo(int a)//一个externinline的函数只会被内联进去,而绝对不会生成独立的汇编码!即使是通过指针应用或者是递归调用也不会让编译器为它生成汇编> 码 //inline int foo(int a)//在其定义所在文件内,它的表现和static inline一致:在能展开的时候会被内联展开编译。但是为了能够在文件外调用它,gcc一定会为它生成一份独> 立的汇编码,以便在外部进行调用。 { return 1+a; } volatile int main(void) { int i = 2; int a = 0; int b = 0; //int (*pf)(int) = foo; //a = pf(i); b = foo(i); return a+b; } ~