互联网运营培训课程,重庆seo整站优化外包服务,免费推广网站58,做网站算软件行业吗http://www.cnblogs.com/nzbbody/p/3437868.html
1、解决什么问题#xff1f; C 编译器是单独、分别对每个cpp文件进行预编译#xff08;也就是对#include#xff0c;#define 等进行文本替换#xff09;#xff0c;生成编译单元。编译单元是一个自包含文件#xff0c;C编…http://www.cnblogs.com/nzbbody/p/3437868.html
1、解决什么问题 C 编译器是单独、分别对每个cpp文件进行预编译也就是对#include#define 等进行文本替换生成编译单元。编译单元是一个自包含文件C编译器对编译单元进行编译。考虑头文件A.h被多个cpp文件比如A1.cppA2.cpp包含每个cpp文件都要进行单独编译其中的A.h部分就会被多次重复的编译造成效率低。
2、怎么解决 把A.h以及类似A.h这样的头文件包含到stdafx.h中当然也可以是其他文件在stdafx.cpp中包含stdafx.h打开stdafx.cpp文件的属性对话框将属性对话框中的预编译头设置为 “/Yc”即创建预编译头。对于原先包含A.h的cpp文件删除#include A.h改成包含stdafx.h同时打开这些cpp文件A1.cppA2.cpp的属性对话框将属性对话框中的 预编译头 设置为 /Yu即使用预编译头。这样的话下次编译A1.cppA2.cpp的时候对于A.h头文件中的那部分就不需要编译了节省时间。
3、预编译头文件原理 工程对预先编译的代码进行编译会生成一个pch文件precompiled header该文件包含了编译的结果。注意可以对任何代码生成到pch中但是生成pch是个很耗时的操作因此只对那些稳定的代码创建预编译头文件。
4、对于预编译头分为创建者使用者不使用者。
5、注意现在的编译器都有Time Stramp 功能当编译整个工程的时候只编译那些修改的cpp文件。但是这并没有解决上面提到的问题。考虑A1.cpp经常修改每次修改都要对包含的A.h头文件部分进行编译。
6、Time Stramp时间戳是指文件属性里的创建修改访问的时间。每次文件内容修改时间戳都会更新为最新的时间时间戳发生变化说明文件被修改了。
补充说明时间戳往往应用在同步比如音频视频不同步。举例来说AB两个人约定在一起7点干什么8点干什么9点干什么如果在7点没有同步就算了尽量保证8点同步。也就是说同步是动态的过程当不同步时一个等待一个追赶保证下一个时间点同步。 预编译头文件 今天在改一个很大的程序慢慢看慢慢改。突然发现一个.c文件里面什么也没有 就几个头文件我一看我靠这不是把简单的问题搞复杂了吗随手删掉那个c文件。 结果不能编译了我靠 fatal error C1083: Cannot open precompiled header file: \Debug/v13_3.pch\: No such file or directory 怎么rebuild all都不行。 上网查了一下才搞懂了 总结 如果工程很大头文件很多而有几个头文件又是经常要用的那么 1。把这些头文件全部写到一个头文件里面去比如写到preh.h 2。写一个preh.c里面只一句话#include preh.h 3。对于preh.c在project setting里面设置creat precompiled headers对于其他 .c文件设置use precompiled header file // 哈哈 我试了一下效果很明显不用precompiled header编译一次我可以去上个厕所用 precompiled header编译的时候我可以站起来伸个懒腰活动活动就差不多啦 转载的文章 预编译头的概念 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是 以.pch为扩展名的)这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 C/C代码--------甚至是inline的函数但是必须是稳定的在工程开发的过程中不会 被经常改变。如果这些代码被修改则需要重新编译生成预编译头文件。注意生成预编 译头文件是很耗时间的。同时你得注意预编译头文件通常很大通常有6-7M大。注意及 时清理那些没有用的预编译头文件。 也许你会问现在的编译器都有Time stamp的功能编译器在编译整个工程的时候它 只会编译那些经过修改的文件而不会去编译那些从上次编译过到现在没有被修改过 的文件。那么为什么还要预编译头文件呢答案在这里我们知道编译器是以文件为单 位编译的一个文件经过修改后会重新编译整个文件当然在这个文件里包含的所有 头文件中的东西.eg Macro, Preprocesser 都要重新处理一遍。VC的预编译头文件 保存的正是这部分信息。以避免每次都要重新处理这些头文件。 预编译头的作用 根据上文介绍预编译头文件的作用当然就是提高便宜速度了有了它你没有必要每次 都编译那些不需要经常改变的代码。编译性能当然就提高了。 预编译头的使用 要使用预编译头我们必须指定一个头文件这个头文件包含我们不会经常改变的 代码和其他的头文件然后我们用这个头文件来生成一个预编译头文件.pch文件 想必大家都知道 StdAfx.h这个文件。很多人都认为这是VC提供的一个“系统级别”的 编译器带的一个头文件。其实不是的这个文件可以是任何名字的。我们来考察一个 典型的由AppWizard生成的MFC Dialog Based 程序的预编译头文件。因为AppWizard 会为我们指定好如何使用预编译头文件默认的是StdAfx.h这是VC起的名字。我们 会发现这个头文件里包含了以下的头文件 #include afxwin.h // MFC core and standard components #include afxext.h // MFC extensions #include afxdisp.h // MFC Automation classes #include afxdtctl.h // MFC support for Internet Explorer 4 Common Controls #include afxcmn.hbr