预编译头的理解

1. 概念

        所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。

        预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。

        编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码

2. FAQ

1. 编译报错——“fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?”

解决方法:右击文件》》属性》》预编译头》》创建/使用预编译头,选择“不使用预编译头”。

原因:应该是你在创建工程时候勾选了“预编译头”,这样项目中所有的cpp文件均需包含stdafx.h文件。可按照上述方法,去除单个cpp文件对预编译头的依赖。或者去除整个工程对“使用预编译头”的设置,右击项目工程》》属性》》通用配置》》C/C++》》预编译头》》创建/使用预编译头,选择“不使用预编译头”。

2. 编译的时候发现,明明包含了头文件,但是感觉编译器并没有包含哪些头文件,并报相应的错误。

解决方法:将stdafx.h文件放在所有依赖的头文件最上面。

原因:编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"头文件、指令等,使用projectname.pch编译这条指令之后的所有代码,所以导致stdafx.h上面的头文件都没有被包含、编译

猜你喜欢

转载自blog.csdn.net/huashuolin001/article/details/79676147
今日推荐