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

时间:2022-09-04 18:41:37

一.背景

在VS2017中新建一个控制台应用程序,生成的工程中main函数所在的文件中,包含头文件:"stdafx.h"

将语句:#include  "stdafx.h" 注释掉之后,VS工程编译错误如下:

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

二.解决

方法1 修改每一个源文件的属性
1) 在解决方案资源管理器中,右击相应的.cpp文件,点击“属性”
2) 在左侧配置属性中,点开“C/C++”,单击“预编译头”
3) 更改右侧第一行的“创建/使用预编译头”,把选项从“使用预编译头(/Yu)”改成“不使用预编译头”

方法2 修改工程属性( 这种做法会使每次编译过程非常缓慢
1)在解决方案右击工程,点击属性
2)在配置属性 -> c/c++ -> 预编译头 中 将 “使用预编译头(/YU)” 改为 “不适用预编译头”

三.理解stdafx.h和stdafx.cpp的使用

根据工程或者工程中源文件的设置,VS判断在编译源文件时是否需要查找预编译。如果设置了需要使用预编译头,而在源文件中没有include预编译头文件,就会报上面描述的错误。

而预编译头文件stdafx.h到底是什么意思呢?

stdafx英文全称:Standard Application Framework Extensions(标准应用程序框架的扩展)

新建立的window控制台应用程序中stdafx.h和stdafx.cpp的内容如下:(建立不同类型的应用程序,stdafx.h中包含的头文件是不同的)

stdafx.h

#pragma once
#include "targetver.h"

#include <stdio.h>
#include <tchar.h>

stdafx.cpp

#include "stdafx.h"

对工程进行编译时,会首先编译stdafx.cpp文件,然后对该源文件中引用的头文件进行预编译。因为stdafx.cpp中include了头文件stdafx.h,

所以会对stdafx.h中include的头文件进行预编译,预编译后会产生后缀名是.pch的预编译头文件。

当VS编译之后的源文件时,如果在这些源文件中include了stdafx.h就会使用刚刚生成的.pch预编译头文件。

这样做可以帮助代码中重复的包含头文件,以及提高代码的编译速度。


参考:https://www.cnblogs.com/webcyz/p/3590222.html

         http://blog.csdn.net/liulina603/article/details/45043995

         https://www.cnblogs.com/MuyouSome/p/3380033.html