c中头文件在cpp文件中引用和.h文件引用的思考
来源:互联网 发布:godaddy域名转址 编辑:程序博客网 时间:2024/05/04 20:35
我们在编写程序中头文件是经常使用的。但是头文件是应该包含在.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文件引用的思考
- C++ 问题 unknown type name 'class' c中头文件在cpp文件中引用和.h文件引用的思考
- 头文件在.c/.cpp中引用和.h文件引用
- C++ 在.h文件中包含头文件和在.cpp文件中包含头文件的原则
- cpp文件中引用C文件导出的Lib库
- cpp文件引用c的头文件,千万注意
- C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别?
- C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别?
- C++ 在.h文件中包含头文件和在.cpp文件中包含头文件有什么区别?
- C/C++ 语言中.h文件和.c文件详细解析 引用 .c和.h文件的区别
- 驱动中.c引用.cpp文件的注意
- vs2010中关于cpp文件引用stdafx.h提示不存在
- C++中.h文件(头文件)和.cpp文件(源文件)的区别 (20
- 头文件引用中<>与“”的区别
- c语言-.h头文件的引用顺序
- OC中头文件的引入和引用
- C++中<>和“”引用头文件的区别
- C++中头文件(.h)和源文件(.cpp)
- MFC tab控件
- IOS_多线程_售票
- 改进异常处理的6条建议
- Hello world to win8~
- hdu 1003 Max Sum
- c中头文件在cpp文件中引用和.h文件引用的思考
- java Runtime 执行exec 不能进行管道解决方案
- 0-1背包问题的多种算法设计与分析
- PHP 程序员学数据结构与算法之《栈》
- android 安装busybox
- Flask电子书
- osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld
- php 实现的基本数据结构
- Lua 与java 互调