C++内部链接与外部链接

本文介绍了C++中的内部链接与外部链接概念,解释了编译单元、内部链接和外部链接的区别,并通过实例解答了为何会出现重定义错误、外部符号无法解析等问题,以及内联函数和模板声明定义的位置要求。
摘要由CSDN通过智能技术生成

你曾经碰到的问题: 

1.为什么有时会出现aaa已在bbb中重定义的错误?

2.为什么有时会出现无法解析的外部符号?

3.为什么有的内联函数的定义需要写在头文件中?

4.为什么对于模板,声明和定义都要写在一起?


编译单元

 什么是编译单元呢?简单来说一个cpp文件就是一个编译单元。

编译单元:当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。

事实上编译每个编译单元(.cpp)时是相互独立的,即每个cpp文件之间是不知道对方的存在的(不考虑#include “xxx.cpp" 这种奇葩的写法)

编译器会分别将每个编译单元(.cpp)进行编译,生成相应的obj文件

然后链接器会将所有的obj文件进行链接,生成最终可执行文件。

 

内部链接与外部链接

那么什么内部链接和外部链接又是什么呢?

我们知道C++中声明和定义是可以分开的

例如 我们可以一个函数声明定义放在b.cpp中,在a.cpp只需再声明一下这个函数,就可以在a.cpp中使用这个函数了

  • 20
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值