请问预编译头文件的作用

我要戒烟了 2009-01-22 01:21:35
不是太清楚预编译头文件的作用

在网上看到一篇文章,说是如果不使用预编译头文件,一个文件经过修改后,会重新编译整个文件和在这个文件里包含的所有头文件中的东西(我想这里应该是所有包含这个文件的都要被编译一次),如果使用预编译头文件则不会再编译没有被改动的文件

按照上面的说法自己试了下,建了1个h1.h和从cpp1.cpp~cpp7.cpp七个.cpp文件,这7个.cpp文件都包含h1.h,并且工程使用预编译头文件。

之后我改了下h1.h中的内容,发现编译器还是把cpp1.cpp~cpp7.cpp都编译了一遍...

疑惑中,还望高人解答
...全文
1176 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr.Gavin 2012-10-16
  • 打赏
  • 举报
回复
肯定会变得,包含的头文件变了,.cpp文件肯定会从新编译了。你可以尝试用一下前置类。
babyyang1213 2009-08-11
  • 打赏
  • 举报
回复
使用预编译文件一般可以指定一些公共配置。
例如 平台 编译器 cpu...信息
lwlchristy 2009-08-11
  • 打赏
  • 举报
回复
这个要多学习下,觉得自己也不是理解的很好!
minixiaodou 2009-08-11
  • 打赏
  • 举报
回复


mark
ydlchina 2009-01-23
  • 打赏
  • 举报
回复
明白了很多
  • 打赏
  • 举报
回复
所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是

以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的

C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会

被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编

译头文件是很耗时间的。同时你得注意预编译头文件通常很大,通常有6-7M大。注意及

时清理那些没有用的预编译头文件。

也许你会问:现在的编译器都有Time stamp的功能,编译器在编译整个工程的时候,它

只会编译那些经过修改的文件,而不会去编译那些从上次编译过,到现在没有被修改过

的文件。那么为什么还要预编译头文件呢?答案在这里,我们知道编译器是以文件为单

位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有

头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件

保存的正是这部分信息。以避免每次都要重新处理这些头文件。
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wsk528 的回复:]
LS的正解

不过感觉LZ应该把主要精力放在程序的速度上,而不是编译的速度上,二者没有什么太大关系

可以看一下林锐的高质量C++编程
[/Quote]

。。。。。。。晕,一个大项目动不动反复编译好久你受得了???
dongpy 2009-01-23
  • 打赏
  • 举报
回复
建了1个h1.h和从cpp1.cpp~cpp7.cpp七个.cpp文件,这7个.cpp文件都包含h1.h,并且工程使用预编译头文件。

之后我改了下h1.h中的内容,发现编译器还是把cpp1.cpp~cpp7.cpp都编译了一遍...
=========================================================================================
7个cpp文件都包含h1.h,就相当于h1.h是cpp的一部分,改了h1.h,就相当于改动了cpp,肯定会重编译cpp.
ForestDB 2009-01-23
  • 打赏
  • 举报
回复
你这里有改动头文件的内容,那包含它的实现文件自然都得从新编译。
所谓预编译头文件,是指头文件一般不怎么会变了,然后可以将它预先编译存成目标格式,然后再编译包含此头文件的实现文件时可以直接用编译过的头文件,加快编译速度。
wsk528 2009-01-22
  • 打赏
  • 举报
回复
LS的正解

不过感觉LZ应该把主要精力放在程序的速度上,而不是编译的速度上,二者没有什么太大关系

可以看一下林锐的高质量C++编程
senkobqb 2009-01-22
  • 打赏
  • 举报
回复
"预编译头文件"是放一些系统头文件,即很少情况下回去变动的那些如: <windows.h> <stdlib.h> <stdio.h> 等等.自己定义的头文件经常会因为各种原因而有所改动,
所以不要放到stdafx.h,都是为了节省编译时间和避免每个CPP都去包含重复的头文件. 我是这么理解的.
下面是MS的注释呀.
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
幽游闭关 2009-01-22
  • 打赏
  • 举报
回复
包含的头文件修改了
包含它的文件要重新编译的

如果只是某个文件使用的结构之类的就放到自己的头文件里定义
不是共通的不要放到一个头文件定义
我要戒烟了 2009-01-22
  • 打赏
  • 举报
回复
那什么情况下使用编译头文件会减少编译速度呢?
waizqfor 2009-01-22
  • 打赏
  • 举报
回复
感觉是你h1.h头文件被包含到里面了 所以编译器会自动检测是否有被改过
我在我机器上测试也是这样

64,683

社区成员

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

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