编译器为了加快编译速度,默认将一常用的,不经常修改的一头文件设成预编译头文件。这个头文件在工程编译开始前,先将预编译头文件先展开编译好。编译.cpp, .c等源文件,若此文件是使用预编译头的话,编译器会忽略一切代码直到遇到 #include 预编译头文件,当然也可以不使用预编译头。例如:
a.h, 被设成预编译头文件。
b.cpp
#include “stdio.h”
aaa
#include “a.h”
则编译b.cpp时,
#include “stdio.h”
aaa
这些语句会被忽略,尽管aaa语句不合法,编译也不会报错的。
在VS中,利用VS向导,生成的工程基本上都是使用预编译头的,编译成功了,一不小心把stdafx.cpp移除,再添加到工程中,再编译,会出现一大堆:
fatal error C1083: Cannot open precompiled header file:
这是由于stdafx.cpp也变成了使用预编译头了。解决这种问题的办法就是:
将stdafx.cpp设置成创建预编译头
整个工程是使用预编译头: