C/C++中 .h文件和 .cpp文件 分开写的原因学习记录。

简单理解:

  1. .h文件是不会被编译器编译的,而每个.cpp文件都会被编译,生成一个.obj文件。
  2. 这两个文件名称不一定非要一样(只要.cpp包含.h即可),只是为了方便阅读而已。在编译时,会根据#include去查相应的.h文件。

具体:

C++允许多次声明,但只允许一次实现。比如int foo();就是一次声明,而 int foo() {} 就是一次实现。
如果编译时有多个.cpp文件中 #include 了同一个含有函数实现 .h, 这时候链接器就会在多个目标文件中找到这个函数的实现,而这在C++ 中是不允许的,此时就会导致 Link错误: 找到一个或多个重定义的符号。 因此为了让函数可以在各个.cpp 中共享,正确的做法就是在.h中只声明函数,并在另一个.cpp文件中实现这个函数。这样就不会冲突了。

作者:耶伦奶奶
链接:https://www.zhihu.com/question/58547318/answer/157444718
来源:知乎

另一种说法

在我看来,cpp并不需要严格地遵从在头文件中声明,源文件中定义这一最标准的准则!完全可以在头文件中进行申明和定义(不仅仅是模版类,内联函数,另外数据结构,类中类等等它们的声明和定义都可以在头文件中进行;另外,也可以完全在源文件中进行申明定义,然后别的模块去include这个源文件!唯一需要保证的是,在一个工程的link阶段,函数或者变量只有一次定义另外写cpp的时候,头文件也不必要用.h来作为后缀,源文件也不必非要用cpp为后缀!cpp和h文件的分离最大的目的,在我看来是为了便于组织管理,以及方便二次开发时的调用!

作者:「已注销」
链接:https://www.zhihu.com/question/58547318/answer/161280273
来源:知乎

反证

那我反过来说吧,不在头文件中声明或不在源文件中定义。
1、不在头文件中声明,使用函数需要自己声明,否则编译错误找不到声明。
2、不在头文件中声明且在源文件中声明,同1。
3、不在源文件中定义,链接错误提示找不到符号。
4、不在源文件中定义且在头文件定义,非static的情况下,多处include出现链接错误提示重复定义符号。static的情况下,多次重复定义导致最终执行文件变大。
根源在于include等同于文件内容归并,链接查找符号。

作者:暗黑谢广坤
链接:https://www.zhihu.com/question/58547318/answer/157482607
来源:知乎

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值