C++头文件中函数被多次定义

疏影横斜水清浅

暗香浮动月黄昏

重定义问题:

img

之前由碰到过类似的问题,然后可以通过条件编译来解决:

#ifndef XXXX
#define XXXX
...
...
    
#endif

大概就是头文件被多个源文件包含以后,里面的函数也会被多次编译生成可执行文件,就发生了重定义的问题。通过条件编译,可以解决一种情况下的问题,那就是头文件中只声明,而不定义或者说不实现。

发生这个问题的本质原因是,当头文件函数被多次编译后,该函数被调用时,编译器不知道该调用哪个函数了,也就是存在二义性问题。

那如何解决呢?

答案是:内联函数。

这里要思考,我们为什么会把一些函数的声明和定义都放到头文件里?

因为这些函数很简单,类似于一种工具,可能会被经常调用。。。

内联函数正是为了这种作用出现的。

为什么内联函数可以解决这个问题呢?

因为内联函数和宏定义类似,在调用点被展开的,也就是相当于手动复制了一份代码在调用点。

多个地方执行同一份代码会产生重定义问题吗?显然不会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值