头文件是包含在.h中好还是.cpp中?

jinlinsky 2009-11-09 03:00:17
预编译头文件都是包含在.cpp中
公司主程序大多代码都是包含在.cpp中的,.h文件中使用到其他类型时 只是使用了前项引用申明
这样做的好处和弊端分别是什么呢?
...全文
1087 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lalala1977 2009-11-09
  • 打赏
  • 举报
回复
在书中常看到头文件包含在.h文件中。
rabbitlzx 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 loaden 的回复:]
引用 7 楼 jinlinsky 的回复:
引用 2 楼 loaden 的回复:
放在cpp中可以减小头文件依赖,可以提高编译速度。
  所以,能放在cpp中的,就不要放在h中。
  可以采取类似声明的方法:

  头文件中:class A;
  就可以使用A*了。
  然后在cpp中再#include "a.h"


请问预编译头文件的东西 如果我#include  <d3d9.h> 我能在其他的.h中定义d3d接口吗
我试了好像不行,拿这样预编译头文件的意义何在呢。。


首先,预编译头文件一般是:StdAfx.h
预编译的目的是提高编译速度。
如果项目使用预编译头文件,则所有cpp都要最先包含用于预编译的头文件,比如:StdAfx.h

d3d9.h这是D3D的头文件,是系统头文件。
你可以放在StdAfx.h中,供所有.cpp包含。

[/Quote]
up
jinlinsky 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 loaden 的回复:]
引用 7 楼 jinlinsky 的回复:
引用 2 楼 loaden 的回复:
放在cpp中可以减小头文件依赖,可以提高编译速度。
  所以,能放在cpp中的,就不要放在h中。
  可以采取类似声明的方法:

  头文件中:class A;
  就可以使用A*了。
  然后在cpp中再#include "a.h"


请问预编译头文件的东西 如果我#include  <d3d9.h> 我能在其他的.h中定义d3d接口吗
我试了好像不行,拿这样预编译头文件的意义何在呢。。


首先,预编译头文件一般是:StdAfx.h
预编译的目的是提高编译速度。
如果项目使用预编译头文件,则所有cpp都要最先包含用于预编译的头文件,比如:StdAfx.h

d3d9.h这是D3D的头文件,是系统头文件。
你可以放在StdAfx.h中,供所有.cpp包含。

[/Quote]

请问是否自己创建过预编译头文件,而不使用创建项目时候自动生成的
我尝试了一下,用/Yc可以自己创建 但是用/Yu的时候会出错,说找不到PCH文件 或者找不到其他文件
不知道是何原因造成的
ZXW0521 2009-11-09
  • 打赏
  • 举报
回复
最好cpp,
yeahe83 2009-11-09
  • 打赏
  • 举报
回复
一般是默认放在cpp里,之后如果出现.h也用了,再把cpp中的删了。
老邓 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jinlinsky 的回复:]
引用 2 楼 loaden 的回复:
放在cpp中可以减小头文件依赖,可以提高编译速度。
所以,能放在cpp中的,就不要放在h中。
可以采取类似声明的方法:

头文件中:class A;
就可以使用A*了。
然后在cpp中再#include "a.h"


请问预编译头文件的东西 如果我#include <d3d9.h> 我能在其他的.h中定义d3d接口吗
我试了好像不行,拿这样预编译头文件的意义何在呢。。
[/Quote]

首先,预编译头文件一般是:StdAfx.h
预编译的目的是提高编译速度。
如果项目使用预编译头文件,则所有cpp都要最先包含用于预编译的头文件,比如:StdAfx.h

d3d9.h这是D3D的头文件,是系统头文件。
你可以放在StdAfx.h中,供所有.cpp包含。
crst_zh 2009-11-09
  • 打赏
  • 举报
回复
最好在.cpp文件中包含.h文件,不要在.h文件包含任何无必要的头文件
可以减小编译依赖,头文件中可以使用前置声明。
The_facE 2009-11-09
  • 打赏
  • 举报
回复
请不要在头文件中“定义”东西,如果你不想给你的战友带来麻烦的话。
陌上花花 2009-11-09
  • 打赏
  • 举报
回复
新手只知道头文件放在.H中最好,至于实际开发中的情形没有经验还
pytf 2009-11-09
  • 打赏
  • 举报
回复
一般是放在cpp中
jinlinsky 2009-11-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loaden 的回复:]
放在cpp中可以减小头文件依赖,可以提高编译速度。
所以,能放在cpp中的,就不要放在h中。
可以采取类似声明的方法:

头文件中:class A;
就可以使用A*了。
然后在cpp中再#include "a.h"


[/Quote]

请问预编译头文件的东西 如果我#include <d3d9.h> 我能在其他的.h中定义d3d接口吗
我试了好像不行,拿这样预编译头文件的意义何在呢。。
xixiaoliu 2009-11-09
  • 打赏
  • 举报
回复
一个原则是,谁用谁包含
lhslktg 2009-11-09
  • 打赏
  • 举报
回复
哪里用到就放哪里
太乙 2009-11-09
  • 打赏
  • 举报
回复
这样做代码更清晰……
jackyjkchen 2009-11-09
  • 打赏
  • 举报
回复
只有头文件必须用到的放到头文件,或者所有cpp都用到的也可以放到头文件
老邓 2009-11-09
  • 打赏
  • 举报
回复
放在cpp中可以减小头文件依赖,可以提高编译速度。
所以,能放在cpp中的,就不要放在h中。
可以采取类似声明的方法:

头文件中:class A;
就可以使用A*了。
然后在cpp中再#include "a.h"

The_facE 2009-11-09
  • 打赏
  • 举报
回复
放在.cpp文件中是比较安全的,个人认为。头文件在多次递归包含后很容易出现一些定义和声明上的问题。尤其是没有使用名字空间或者直接在头文件里包含某个名字空间的时候。我最恨某些人在.h文件中写
using namespace std;
这一行代码曾经让我疯狂的忙活了一天。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧