为什么内联函数的声明和定义不能分离?

在C++程序中,如果我们将某个内联函数的声明和定义分离,会发生链接错误。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这是为什么?首先我们要知道内联函数是

我们知道,如果函数没有加inline的话。它会在编译期间进行符号汇总,在汇编期间生成符号表,最后在链接的时候进行符号表的合并,这样的话,定义函数的文件和声明函数的文件都能拿到函数的地址,也就都能使用函数了。即使声明和定义分离,后续在使用这个函数的时候也能找到这个函数的地址。

可是,如果函数加了inline的话,并且声明和定义分离在两个文件中,只有定义函数的文件中能使用这个函数,声明函数的文件中却不能使用函数。这是因为加了inline之后,定义函数的文件就不会将该函数放在符号表中了,而在编译阶段就直接展开了。后面在符号汇总的时候,声明函数的文件也找不到该函数的地址了。这个时候,声明函数的文件中如果再使用这个函数,它是找不到这个函数的,这个函数本身也就是不存在的,它没有进符号表,它在编译阶段就展开了

综上所述,内联函数声明和定义分离在不同文件中的话,定义函数的文件不会将函数和函数地址放在符号表中,声明函数的文件在使用该函数时会找不到该函数,所以会发生里链接错误。



版权声明:本文为CSDN博主「zzu_ljk」的原创文章
原文链接:https://blog.csdn.net/m0_72940975/article/details/128905240

猜你喜欢

转载自blog.csdn.net/C_Rio/article/details/131868857