预编译头 #include"预编译头文件"为何要放在第一句

vs2010 预编译头
jiese1990

预编译头原理

你有两个文件a.cpp和b.cpp,都包含了同一个头文件c.h。那么正常的流程是:将c.h和a.cpp合并,编译成a.obj;将c.h和b.cpp合并,编译成b.obj;最后将a.obj和b.obj链接成可执行文件。
头文件c.h的内容实际上被解析了两遍。那干嘛不把c.h解析好了保存成临时文件,用时读入!预编译头就是这个原理:把 预编译头文件 事先编译成一种二进制的中间格式,供后续的编译过程使用。
如果预编译头所涉及的部分不发生改变的话,在随后的编译过程中此部分不重新进行编译。

每一个cpp文件里都必须#include”预编译头文件”

在cpp里没有#include”预编译头文件”时:
报错:fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source?(StdAfx.h是我的预编译头文件)

#include”预编译头文件”指令必须加载第一句

所有在指令 #include "预编译头文件" 前的代码都是预编译的,
它跳过 #include "预编译头文件"指令 及 此指令之前的指令,使用.pch编译这条指令之后的所有代码。
(在vs里创建工程默认使用stdafx.h为预编译头文件)
也就是说在一个jiese.cpp文件里
#include ”jiese.h”
#inlcude “stdafx.h”
这两句相当于只有一句#inlcude “stdafx.h”, #include ”jiese.h”指令不会被编译

生成预编译头文件是很耗时间的。同时你得注意预编译头文件通常很大。
它们都是编译器之间不兼容的^_^,就是说你不能把VC生成的预编译头拿到GCC上去用。

vs2010预编译头设置方法,工程属性窗口


预编译头生成文件



参考网址:

http://www.diybl.com/course/3_program/c++/cppjs/20081013/150579.html



猜你喜欢

转载自blog.csdn.net/jiese1990/article/details/7850008
今日推荐