IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C/C++中 .h文件和 .cpp文件 分开写的原因学习记录。 -> 正文阅读

[C++知识库]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
来源:知乎

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 11:33:43  更:2021-09-09 11:35:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:11:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码