C++中的.h,cpp以及.hpp文件

每日一问15:C++中的.h,cpp以及.hpp文件

1. 编译器角度的头文件(.h)和源文件(.cpp)

先从编译器角度,来看一下头文件(.h)和源文件(.cpp):

​ 对于头文件(.h),在预处理阶段,头文件被包含到源文件后,它的使命就基本结束了。头文件包含了程序运行中可能需要用到的变量和函数等,在编译过程中,编译器只检查所使用的函数和变量的声明是否存在,对于源文件中的实现并不关心。源文件编译后成生成目标文件(obj文件),目标文件中,这些函数和变量就视作一个个符号。链接器会将所有的目标文件链接起来,组成一个exe程序。在link的时候,需要在makefile里面说明需要连接哪个obj文件,此时,链接器去.obj文件中找在.cpp中实现的函数,再把他们build到makefile中指定的那个可以执行文件中。

​ 一个.cpp对应一个.obj,然后链接器将所有的.obj链接起来,组成一个.exe程序。如果一个.cpp要使用另一个.cpp定义的函数,只需在这个.cpp中写上它的函数声明即可。链接器将所有的obj链接起来,但是如果碰巧有相同的函数或外部变量怎么办?C++可以通过一种叫做链接属性的关键字来限定,某个函数是属于整个程序公用的,还是只在一个编译单元obj里面使用,这些关键字就是extern(外部链接)和static(内部链接)。

2. 为什么需要头文件(.h)和源文件(.cpp)

  1. 如果在h文件中实现一个函数体,那么如果在多个C文件中引用它,而且又同时编译多个C文件,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值