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

内联函数在C++中,如果声明和定义分离,可能会导致链接错误。因为inline函数不会在符号表中生成入口,编译阶段即展开,所以声明函数的文件在找不到函数定义时会出现错误。这与非内联函数的处理方式不同,后者会在链接阶段合并符号表。
摘要由CSDN通过智能技术生成

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

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



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值