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;
}
~           

 

posted @ 2016-08-17 22:09  oucaijun  阅读(431)  评论(0编辑  收藏  举报
下载TeamViewer完整版 下载TeamViewer