📜  C语言中的内联函数

📅  最后修改于: 2021-05-26 03:11:09             🧑  作者: Mango

内联函数是那些函数,它的定义是小,在这里它的函数调用事件发生的地点被取代。函数替换完全是编译器的选择。

让我们看下面的例子:

#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基础课程》。