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

可是头文件是应该包括在.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中。

这样就能解决这个问题。

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

c中头文件在cpp文件里引用和.h文件引用的思考的更多相关文章

  1. C中头文件在cpp文件中引用和.h文件引用

    1.编译器会单独编译每个cpp文件.头文件会复制到cpp文件中. 2.有时会遇到这样的一个问题a.cpp要调用b.cpp中的函数,而b.cpp又要调用a.cpp中的函数.这就牵扯到相互调用.这时如果我 ...

  2. 所有W版本的函数都在wchar.h文件(_wfopen),和stdlib.h文件(wcstombs),和stdio.h文件(vwprintf)

    C:\Qt\Qt5.6.2\Tools\mingw492_32\i686-w64-mingw32\include\wchar.h C:\Qt\Qt5.6.2\Tools\mingw492_32\i68 ...

  3. C语言中头文件和cpp文件解析

    务必提前预读这里的内容:http://www.cnblogs.com/stemon/p/3999844.html 回到cpp文件与头文件各写什么内容的话题上: 理论上来说cpp文件与头文件里的内容,只 ...

  4. c++中头文件与实现文件的关系

    转自:http://xiangyanglai.blog.163.com/blog/static/2047252022012715103338279/ 关于两者以前的关系,要从N年以前说起了~ long ...

  5. 读书笔记-详解C程序开发中 .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  6. .c和.h文件的区别(头文件与之实现文件的的关系~ )

     .c和.h文件的区别 一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢 ...

  7. C中的C文件与h文件辨析(转)

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成 ...

  8. C中的C文件与h文件辨析

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:       1.预处理阶段 2.词法与语法分析阶段 .编译阶段,首先编译成纯 ...

  9. C 语言项目中.h文件和.c文件的关系

    http://blog.csdn.net/xingkong_678/article/details/38639847 关于两者以前的关系,要从N年以前说起了~ long long ago,once a ...

随机推荐

  1. Android内存优化12 内存泄漏常见情况3 注册泄漏

    android 中有很多注册和反注册,由于在注册后,上下文自身会被持久化的观察者列表所持有,如果不进行反注册,就会造成内存泄漏 内存泄漏1:Sensor Manager 代码如下: MainActiv ...

  2. es6数组去重复

    var arr=[1,1,2,3,5,7,7,7] arr=Array.from(new Set(arr))

  3. Android疑难杂症之android:configChanges="orientation" 无效

    通常情况下,当“屏幕方向”变化时会销毁并重建当前Activity.而我们有时候并不希望重新创建Activity实例,然后就会在AndroidManifest.xml中配置Activity: <a ...

  4. 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern) 介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 示例有Message和MessageModel,Messag ...

  5. ECCV 2014 Oral Paper

    今年的ECCV 的paper已经挂到了网上.本文整了当中Oral Paper. 一,Tracking and Activity Recognition

  6. VMware Workstation 重启服务脚本 解决连不上ssh问题

    解决虚拟机,每次启动连不上ssh问题,需要关闭虚拟机,再执行脚本.执行完后,再启动虚拟机就可以连上ssh啦! 脚本名称:vmware_server_restart.bat (请以管理员身份运行,否则可 ...

  7. unity color space 选取

    https://unity3d.com/cn/learn/tutorials/topics/graphics/choosing-color-space https://docs.unity3d.com ...

  8. KMP字符串模式匹配详解(zz)

    刚看到位兄弟也贴了份KMP算法说明,但本人觉得说的不是很详细,当初我在看这个算法的时候也看的头晕昏昏的,我贴的这份也是网上找的.且听详细分解: KMP字符串模式匹配详解 来自CSDN     A_B_ ...

  9. ActiveMQ订阅模式持久化实现

    实现步骤:1.配置发送xml,applicationContext-send.xml <?xml version="1.0" encoding="UTF-8&quo ...

  10. limit是mysql的语法

    select * from table limit m,n 其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条. , 即取出第3条至第6条,4条记录 转自:htt ...