在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?linux
右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译头c++
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?spa
1、概念:.net
一、预编译:就是编译器首先编译某个文件(称为预编译头文件),而后将这个编译结果保存起来,以后若是有其余源文件include了这个“预编译头文件”的时候,则自动从这个编译结果提取须要的信息进行编译。设计
二、预编译结果文件(Precompiled header file):就是那个用来保存已经编译了的符号信息的文件(.PCH做为后缀)blog
三、生成预编译结果文件(Create Precompiled header file):咱们说源文件A经过文件B“生成预编译结果文件”是指编译A的时候将其中编译B的编译结果保存成预编译结果文件。通常使用向导的话,A文件就是“stdafx.cpp”,B文件是“stdafx.h”。stdafx.cpp中就一行语句:资源
#include “stdafx.h”get
四、使用预编译头(Using precompiled header):咱们说某个源文件(a.cpp)经过“stdafx.h”来使用预编译结果是指编译a.cpp的时候,若是a.cpp第一行include语句是#include “stdafx.h”的话,那么直接取预编译结果文件的结果,再也不从新编译”stdafx.h”编译器
2、向导是怎么作的?编译
一、设置“stdafx.cpp”的预编译选项是经过“stdafx.h”文件来“生成预编译结果文件”。
二、其余源文件的预编译选项设置是经过“stdafx.h”来“使用预编译头”
3、使用原则?
一、将相对稳定的头文件(好比CRT,STL,第三方固定的库)所有写在stdafx.h中。(是否使用stdafx.h依赖我的喜爱,不过使用stdafx.h能够和向导保持一致)
二、所有源文件第一行都加#include “stdafx.h”。
三、一些不能修改的源文件(若是公共的代码,不具有权限修改的代码),设置他的预编译选项是“不使用预编译头”。注意,必定不能是选择“自动生成预编译头”,由于这样会将stdafx.h的结果冲掉(这个不知道是BUG仍是设计的问题了,.^_^。)。
4、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总以为是和编译平台绑定了,不具有移植性?
A、其实,注意一下stdafx.h的写法就没有问题了。个人解决方案是(stdafx.h的内容):
–begin of file stdafx.h
#ifdef _WIN32
#include “win.h” // 泛指window下的公共头文件
#else
#include “linux.h” // 泛指linux下的公共头文件
#endif
#include “crt.h” //泛指c标准库
#include “stl.h” //泛指STL库
–end of file
或者更加简单一点,若是不是VC编译器,那么stdafx.h就什么内容都不写!