错误描写叙述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。
是否忘记了向源中加入“#include "stdafx.h"”?
这些.h和.cpp文件是属于标准C++的开源源码范畴,与MFC无更深层次的关系。
一、概念:
1、预编译:就是编译器首先编译某个文件(称为预编译头文件)。然后将这个编译结果保存起来,之后假设有其它源文件include了这个“预编译头文件”的时候,则自己主动从这个编译结果提取须要的信息进行编译。
2、预编译结果文件(Precompiled header file):就是那个用来保存已经编译了的符号信息的文件(.PCH作为后缀)
3、生成预编译结果文件(Create Precompiled header file):我们说源文件A通过文件B“生成预编译结果文件”是指编译A的时候将当中编译B的编译结果保存成预编译结果文件。
一般使用向导的话。A文件就是“stdafx.cpp”,B文件是“stdafx.h”。stdafx.cpp中就一行语句:
#include “stdafx.h”
4、使用预编译头(Using precompiled header):我们说某个源文件(a.cpp)通过“stdafx.h”来使用预编译结果是指编译a.cpp的时候,假设a.cpp第一行include语句是#include “stdafx.h”的话,那么直接取预编译结果文件的结果。不再又一次编译”stdafx.h”
二、向导是怎么做的?
1、设置“stdafx.cpp”的预编译选项是通过“stdafx.h”文件来“生成预编译结果文件”。
2、其它源文件的预编译选项设置是通过“stdafx.h”来“使用预编译头”
三、使用原则?
1、将相对稳定的头文件(比方CRT。STL。第三方固定的库)所有写在stdafx.h中。(是否使用stdafx.h依赖个人喜好,只是使用stdafx.h能够和向导保持一致)
2、所有源文件第一行都加#include “stdafx.h”。
3、一些不能改动的源文件(假设公共的代码。不具备权限改动的代码)。设置他的预编译选项是“不使用预编译头”。
注意,一定不能是选择“自己主动生成预编译头”。由于这样会将stdafx.h的结果冲掉(这个不知道是BUG还是设计的问题了,.^_^。)。
四、Q&A
Q、为什么不所有使用“自己主动生成预编译头文件”?
A、“自己主动生成预编译头文件”和什么都不用没有什么两样。编译速度没有质的提高。
Q、手工加入一个新的源文件到项目的时候,常常出现相似错误:
fatal error C1010: unexpected end of file while looking for precompiled header directive
A、由于向导缺省的设置是“使用预编译头”,可是你新加的文件并没有在第一行包括“stdafx.h”。解决办法要么改动成“不使用预编译头”。要么加入一行#include “stdafx.h”
Q、加stdafx.h和stdafx.cpp总认为是和编译平台绑定了,不