今天碰到了一个错误, "fatal error C1010: unexpected end of file while looking for precompiled header directive"。 研究了一下,结果如下。
1. 这是因为启用了预编译的功能,关闭这个功能可以解决这个问题,但很可能带来编译效率的降低。这个功能主要是通过把不经常改动的预编译成一个PCH文件,然后下次编译则可以直接使用来降低时间。
2. VS IDE里,默认情况下的预编译头文件是"stdafx.h" (afx是Application Framework Extension)的缩写,且默认这个功能是开启的。
3. 在所有的CPP文件开头都需要加上#include "stdafx.h" 这句话。stdafx名字可以修改,不是固定的。特别要注意的是,这句话之前的所有代码都会被跳过,所以一定要放在第一句。比如放成以下的,则会出错,因为第一句不会被编译。
#include <iostream>
#include "stdafx.h"
错误:
Error C2065 'cout': undeclared identifier
如果预编译头文件被正确使用时,它确实大大提高我们编程的效率(你工作中,有多少时间是在等编译完成?很多吧,这个时候一般都很无聊,无奈,浪费时间)。但是他太容易用错了. 下面是几种常见的错误用法.
1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以)
原因:自己的头文件一般会经常变, 便利后导致预编译的东东重新编译, 降低了编译速度.
2) 在其他的头文件里也include 预编译头文件
假设你的其他头文件也include了预编译头文件, 如果别人引用你的这个头文件又没有设置成预编译头文件, 那引用你头文件的这个人就煎熬了.
原因:由于你用到的.h文件里include了预编译头文件,他在他本身的project里,vs能够判断的出他是预编译头,也能找的到需要的pch,