内联函数是那些函数,它的定义是小,在这里它的函数调用事件发生的地点被取代。函数替换完全是编译器的选择。
让我们看下面的例子:
#include
// Inline function in C
inline int foo()
{
return 2;
}
// Driver code
int main()
{
int ret;
// inline function call
ret = foo();
printf("Output is: %d\n", ret);
return 0;
}
编译器错误:
In function `main':
undefined reference to `foo'
为什么会发生此错误?
这是GCC处理内联函数的副作用之一。编译后, GCC将执行内联替换作为优化的一部分。因此main内部没有函数调用存在(foo)。请在下面检查编译器将生成的汇编代码。
通常,GCC的文件范围是“非外部链接”。这意味着内联函数永远不会提供给链接器,这会导致链接器错误,如上所述。
如何清除此错误?
要解决此问题,请在内联之前使用“静态”。使用static关键字会强制编译器在链接器中考虑此内联函数,因此程序可以编译并成功运行。
例子:
#include
// Inline function in C
static inline int foo()
{
return 2;
}
// Driver code
int main()
{
int ret;
// inline function call
ret = foo();
printf("Output is: %d\n", ret);
return 0;
}
输出:
Output is: 2
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。