博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c中头文件在cpp文件里引用和.h文件引用的思考
阅读量:6807 次
发布时间:2019-06-26

本文共 864 字,大约阅读时间需要 2 分钟。

       我们在编敲代码中头文件是常常使用的。

可是头文件是应该包括在.H文件里还是在.cpp文件里。在这个其中有什么样去差别呢。

 假如说我们编写了一个a.cpp  。我们将a.cpp文件的变量和函数申明在a.h中。

在a.h文件有使用了b.中定义的类型type1数据m_type,相同b.cpp的头文件一些变量也声明在b.h中。

此时我们当然能够在a.cpp中包括b.h 也能够在a.h中。这样都是可行的。由于我们编译的时候会会将b.h包括进来。

而.h文件是不參与编译的。然后我们继续深入。

假如我们将b.h文件定义在a.cpp中 。我们在c.pp要是a.cpp的函数。

我们将a.h文件包括在c.cpp或者c.h的时候我们会发现c.pp会报错(假如c.pp中没有包括b.h或在包括b.h。但b.h放在c.h的以下) 报错的是将我们没有找到m_type;m_type是无效值。  我開始的时候的也比較疑惑。

如今想通了。编译器会单独编译每一个cpp文件。头文件会拷贝到cpp文件其中。

我们的c.pp中没有包括b.h。c.pp中会复制a.h这时你会发现问题来来了。 a.h拷贝到c.cpp中会将type1 m_type 也拷贝到c.cpp中  这时候编译就会不type1 m_type  就会报不认识type1 的错误。假设我们将b.h包括在a.h中这个问题就会避免掉。由于在a.h在c.cpp中复制展开的时候。b.h也会在c.cpp中复制展开。从而避免了这个问题。当我们在编译遇到这种问题的时候 ,我们应该去看是哪个cpp出来问题  然后在看看是哪个头文件出来问题,这样就能找到我们包括的错误。

   可是我们有时候会遇到这种一个问题a.cpp 要调用b.cpp中的函数,而b.cpp又要调用a.cpp 的函数 。这就牵扯到相互调用  这是假设我们把b.h中包括a.h, a.h中包括b.h。

这是后编译会出现故障。

解决的办法是将a.h包括在b.cpp中。将b.h包括在a.cpp中。

这样就能解决这个问题。

   以上是我的一点小经验 希望能帮到大家。

转载地址:http://ebtwl.baihongyu.com/

你可能感兴趣的文章
【直播预告】云栖社区特邀专家蒋泽银:Jpom一款低侵入式Java运维、监控软件 ...
查看>>
零跑C-more收获更多期待,而零跑S01还在追求更多的订单 | 2019 上海车展 ...
查看>>
想成长为一名年薪50万+的实战型架构师?必掌握这7大实战技能经验
查看>>
百行征信出首招,发布授信 反欺诈 核验三款测试产品
查看>>
日志服务Python消费组实战(三):实时跨域监测多日志库数据
查看>>
操作数据库表
查看>>
王传福:电动汽车开始由政策与市场双轮驱动|电动车百人会2019
查看>>
(十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...
查看>>
Ansible 常用
查看>>
解决yum安装mysql时Requires: libc.so.6(GLIBC_2.17)(64bit)
查看>>
阿里云ECS云服务器规格如何选择?根据使用场景选择规格
查看>>
深入理解uwsgi和gunicorn网络模型
查看>>
Trapcode套装插件原创图文/视频安装教程
查看>>
flowable实现多实例节点的自由跳转
查看>>
算法偏见侦探
查看>>
信用体系,生态之魂!——保险科技生态建设
查看>>
[译]利用贝叶斯推理做硬件故障率的准实时预测
查看>>
费马大定理的启示:记笔记是一种信仰
查看>>
飘刃 0.1.1 发布,速度碾压 Vue-CLI 的轻量级 Vue 项目构建工具
查看>>
不兼容惹的祸,Calibre 作者拒绝迁移至 Python 3
查看>>