欢迎访问我的blog:http://blog.thinkinside.me
参考资料
http://www.cnblogs.com/cnmaizi/archive/2011/01/19/1939686.html
http://www.greenend.org.uk/rjk/tech/inline.html
http://gcc.gnu.org/onlinedocs/gcc/Inline.html#Inline
http://en.wikipedia.org/wiki/Inline_function
http://www.parashift.com/c++-faq-lite/inline-functions.html
http://www.cplusplus.com/forum/articles/20600/
C语言:
static inline
gcc和c99标准的作用都一样。表示该函数具有static的特性(调用的c文件内有效)和inline特性(展开编译,需要的话会有独立汇编代码。无需进出栈操作)
extern inline
gcc: 强制将函数设置为inline展开,所以这个函数地址是不存在的,不会有独立汇编代码。无法展开时(比如要取得函数地址)会去找外部的函数实现,如果在其他文件中未找到实现,会返回unresolved reference。
c99: 会有独立的汇编代码。声明或实现有未声明inline,或者有声明了extern。
inline
如果在a.c中实现了inline func_a() {…},那么:
gcc: a.c中其他函数调用func_a是inline展开,其他文件b.c, c.c...中调用则是按照普通函数调用的模式,并非展开。func_a会有独立的汇编object
c99:类似于gcc的extern inline。声明和实现都有inline,但没有extern。可以在本函数内实现一个外部函数的替代实现。不会有独立汇编代码,其他函数无法call到
| gcc | c99 |
static inline | 如果需要会有独立object code | 如果需要会有独立object code |
inline | 有独立object code | 没有独立object code |
extern inline | 没有独立object code | 有独立object code |
C++:
declaration inline
在class声明中实现的method默认是inline的
class Fred {
public:
void f(int i, char c){
...
}
};
definition inline
在声明中不需要标明inline,在实现中标明
如:
class Fred {
public:
void f(int i, char c);
};
inline
void Fred::f(int i, char c)
{
...
}
Microsoft VC:
inline的关键字是__forceinline