Cra*_*rks 11
当编译器内联扩展函数调用时,函数的代码将被插入到调用者的代码流中(概念上类似于#define宏所发生的情况).这取决于其他很多东西,可以提高性能,因为优化器可以在程序上集成被调用的代码 - 将被调用的代码优化到调用者中.
有几种方法可以指定函数是内联的,其中一些涉及内联关键字,另一些则不涉及.无论您如何将函数指定为内联,都是允许编译器忽略的请求:它可能内联扩展内联函数的部分,全部或全部调用.(如果这看起来毫无希望地模糊,不要气馁.上述的灵活性实际上是一个巨大的优势:它让编译器对待大型函数与小函数不同,而且它让编译器生成易于调试的代码,如果你选择的话正确的编译器选项.)
在最简单的情况下,内联函数将被放入其调用站点,就像您在那里复制并粘贴它一样.因此,
inline int madd( int a, int b, int c )
{
return a * b + c;
}
void foo( int data[3] )
{
int result = madd( data[0], data[1], data[2] );
printf("%d\n", result); // note to pedants: this is simpler than a cout stream, so there
}
Run Code Online (Sandbox Code Playgroud)
编译器可以把它变成
void foo( int data[3] )
{
int result = data[0] * data[1] + data[2] ; // madd is replaced inline
printf("%d\n", result);
}
Run Code Online (Sandbox Code Playgroud)