VC编程-预编译头文件(precompiled header)

C++ 预编译头文件(Precompiled Header,PCH) 后续编译时,如果其他源文件中也包含了同样的预编译头文件,编译器会直接使用之前生成的二进制文件,而不是重新预处理一遍头文件。它的原理是先将一些常用的头文件预处理,生成一个二进制文件(通常是.pch文件),然后在后续的编译中,直接引用这个二进制文件,避免了重复的预处理过程,从而提高了编译速度。例如,如果你预编译了“stdafx.h”头文件,你就会得到一个预编译头文件,每次你包含“stdafx.h”头文件时,编译器都会自动搜索名为“stdafx.h.gch”的预编译头文件。 阅读详情

预编译头文件(precompiled header)

今天在写程序的时候,突然发现要测试的代码是用c写的,还是用gcc编译的,可是我已经建立了测试的相关环境,没办法,只能一步步的改了,将相关的头文件、结构和变量移植以后,编译了一下(只编译了C文件),竟然出错,出错信息为:fatal error C1010: unexpected end of file while looking for precompiled header directive

然后无论怎么改代码都是这一句出错信息,最后改成了一个最简单的空函数,仍然不行,改成cpp文件,然后前面加上#include "stdafx.h",编译通过,再改成c文件,还是出错,然后郁闷了半天,后来想到是编译器问题,改了半天设置也没搞定,最后没办法只好去网上求助了,输出precompiled header directive,想不到网上那么多的结果,看了几篇,轻松搞定,真后悔没有早点在网上搜索,浪费了不少时间。。

解决方法:

1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的 Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。确定。

2、在文件开头添加:

#include "stdafx.h"

对预编译头文件说明如下:  

   

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

   

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

   

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

   

因此,所有的CPP实现文件第一条语句都是:#include   "stdafx.h"。

------------------------------------

unexpected end of file while looking for precompiled header directive Error executing cl.exe.我在文件头上添加了:

#include "stdafx.h" 还是不能运行,请多指教!

Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。确定。

如果发生错误的文件原本是该工程中的,则检查该文件头部有没有#i nclude "stdafx.h"语句,没有的话添加。

如果还不行,也有可能是定义的类或结构体等最后忘了加分号,注意一下

------------------------------------------

问题:我在编译程序中老出现“fatal error C1010: unexpected end of file while looking for precompiled header directive”这一句,但我查看了程序并没有错,请问这是怎么一回事?

A回答:

    肯定是一个新添加的类的.cpp文件开头没包含stdafx.h,在该文件最前面加上即可。

    

BOBO的意见:

    有时可以使用右键点击项目工程中的该cpp文件,选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头,解决这个问题。

---------------------------------------

编译出现问题:unexpected end of file while looking for precompiled header directive

解决方案:

需要在文件头上添加一句:

#include "stdafx.h"

这个文件定义了源程序为C++格式。

否则文件需要保存为.C格式

--------------------------------

错误:fatal error C1083: Cannot open precompiled header file: 'Debug\test4.pch': No such file or directory

解决方案:

或rebuild all,或重新编译一下stdafx.cpp就OK了,呵呵,又长知识了。

---------------------------------

今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠:

fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\':

No such file or directory

怎么rebuild all都不行。

上网查了一下,才搞懂了:

----------------总结------

如果工程很大,头文件很多,而有几个头文件又是经常要用的,那么

1。把这些头文件全部写到一个头文件里面去,比如写到preh.h

2。写一个preh.c,里面只一句话:#include "preh.h"

3。对于preh.c,在project setting里面设置creat precompiled headers,对于其他.c文件,设置use precompiled header file

//

哈哈

我试了一下,效果很明显,不用precompiled header,编译一次我可以去上个厕所,用 precompiled header,编译的时候,我可以站起来伸个懒腰,活动活动就差不多啦

---------转载的文章----------

预编译头的概念:

所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会 被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编 译头文件是很耗时间的。同时你得注意预编译头文件通常很大,通常有6-7M大。注意及 时清理那些没有用的预编译头文件。 也许你会问:现在的编译器都有Time stamp的功能,编译器在编译整个工程的时候,它 只会编译那些经过修改的文件,而不会去编译那些从上次编译过,到现在没有被修改过的文件。那么为什么还要预编译头文件呢?答案在这里,我们知道编译器是以文件为单 位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有 头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件保存的正是这部分信息,以避免每次都要重新处理这些头文件。

预编译头的作用:

根据上文介绍,预编译头文件的作用当然就是提高编译速度了,有了它你没有必要每次都编译那些不需要经常改变的代码,编译性能当然就提高了。

预编译头的使用:

要使用预编译头,我们必须指定一个头文件,这个头文件包含我们不会经常改变的 代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件)

想必大家都知道 StdAfx.h这个文件。很多人都认为这是VC提供的一个“系统级别”的编译器带的一个头文件。其实不是的,这个文件可以是任何名字的。我们来考察一个典型的由AppWizard生成的MFC Dialog Based 程序的预编译头文件。(因为AppWizard 会为我们指定好如何使用预编译头文件,默认的是StdAfx.h,这是VC起的名字)。我们会发现这个头文件里包含了以下的头文件:

#include <afxwin.h> // MFC core and standard components

#include <afxext.h> // MFC extensions

#include <afxdisp.h> // MFC Automation classes

#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls

#include <afxcmn.h>

这些正是使用MFC的必须包含的头文件,当然我们不太可能在我们的工程中修改这些头文件的,所以说他们是稳定的。那么我们如何指定它来生成预编译头文件。我们知道一个头文件是不能编译的。所以我们还需要一个cpp文件来生成.pch 文件。这个文件默认的就是StdAfx.cpp。在这个文件里只有一句代码就是:#include “Stdafx.h”。原因是理所当然的,我们仅仅是要它能够编译而已,也就是说,要的只是它的.cpp的扩展名。我们可以用/Yc编译开关来指定StdAfx.cpp来生成一个.pch文件,通过/Fp编译开关来指定生成的pch文件的名字。打开project ->Setting->C/C++ 对话框,把Category指向Precompiled Header。在左边的树形视图里选择整个工程 Project Options(右下角的那个白的地方)可以看到 /Fp “debug/PCH.pch”,这就是指定生成的.pch文件的名字,默认的通常是 <工程名>.pch(我的示例工程名就是PCH)。

然后,在左边的树形视图里选择StdAfx.cpp.//这时只能选一个cpp文件!

这时原来的Project Option变成了 Source File Option(原来是工程,现在是一个文件,当然变了)。在这里我们可以看到 /Yc开关,/Yc的作用就是指定这个文件来创建一个Pch文件。/Yc后面的文件名是那个包含了稳定代码的头文件,一个工程里只能有一个文件的可以有YC开关。VC就根据这个选项把 StdAfx.cpp编译成一个Obj文件和一个PCH文件 。

然后我们再选择一个其它的文件来看看,//其他cpp文件在这里,Precomplier 选择了 Use Precompiled Header 一项,头文件是我们指定创建PCH 文件的stdafx.h 文件。事实上,这里是使用工程里的设置,(如图1)/Yu”stdafx.h”,这样我们就设置好了预编译头文件,也就是说,我们可以使用预编译头功能了。

以下是注意事项:

1):如果使用了/Yu,就是说使用了预编译,我们在每个.cpp文件的最开头,我强调一遍是最开头,包含你指定产生pch文件的.h文件(默认是stdafx.h)不然就会有问题。如果你没有包含这个文件,就告诉你Unexpected file end. 如果你不是在最开头包含的,

你自己试以下就知道了,绝对有很惊人的效果?..

fatal error C1010: unexpected end of file while looking for precompiled

header directive

Generating Code...

2)如果你把pch文件不小心丢了,编译的时候就会产生很多的不正常的行为。根据以上的分析,你只要让编译器生成一个pch文件,也就是说把 stdafx.cpp(即指定/Yc的那个cpp文件)从新编译一遍,当然你可以傻傻的 Rebuild All,简单一点就是选择那个cpp文件,按一下Ctrl + F7就可以了,不然可是很浪费时间的哦

预编译头文件:大幅提升C++项目编译速度的利器 这是一种更现代的编译优化技术,可以替代传统的头文件和预编译头文件。Modules 提供了更快的编译速度和更好的隔离性,但目前编译器支持仍在完善中。在C++开发中,编译时间往往是一个令人头疼的问题,尤其是当项目规模较大、依赖的头文件较多时,每次修改代码后漫长的编译等待会严重影响开发效率。这样,在后续编译过程中,编译器可以直接加载这些预编译结果,而无需重复解析相同的头文件,从而节省大量时间。当编译其他源文件时,如果它们包含了预编译头文件,编译器会直接加载预编译的二进制数据,而不是重新解析所有头文件。 阅读详情

相关推荐

拆解维修指南:当你的大扭矩电动扳手‘罢工’,如何自己动手排查行星齿轮与谐波传动故障?

本文详细解析了大扭矩电动扳手行星齿轮与谐波传动故障的排查与修复方法。从故障初判、拆解工艺到行星齿轮系统检测、谐波传动维护,提供了一套完整的维修指南,帮助用户快速诊断和解决常见问题,延长工具使用寿命。

weixin_42525582的博客 435

qmake:使用预编译头(实用)

预编译头 (PCH) 是一些编译器(注意并非所有编译器都支持此特性)支持的一种性能特性,用于编译稳定的代码体,并将代码的编译状态存储在二进制文件中。在后续的编译过程中,编译器会加载存储的状态,并继续编译指定的文件。 每次后续编译都更快,因为不需要重新编译稳定的代码。 预编译头文件需要将 C 包含与 C++ 包含分开,因为 C 文件的预编译头文件可能不包含 C++ 代码。 项目选项 要使项目使用预编译头文件,只需在项目文件中定义 PRECOMPILED_HEADER 变量: PRECOMPILED

友善啊,朋友的博客 941

Avalonia v11实战:手把手教你从零创建第一个跨平台桌面App(含设计器不显示的解决方案)

本文详细介绍了如何使用Avalonia v11从零开始创建跨平台桌面应用,包括环境准备、项目创建、界面设计及常见问题解决方案。特别针对设计器不显示等常见问题提供了实用解决方法,帮助.NET开发者快速掌握这一强大的UI框架,实现Windows、macOS和Linux多平台应用开发。

weixin_30417487的博客 163

预编译头文件解决C/C++混合编程问题

饿的神啊 2776

WPF实战:利用Live Charts实现高性能动态曲线可视化

本文详细介绍了如何在WPF中使用Live Charts实现高性能动态曲线可视化,特别适用于工业监控和金融分析等实时数据场景。通过增量渲染、内存复用和硬件加速等核心技术,Live Charts能够高效处理高频数据更新,显著提升图表流畅度。文章提供了从基础实现到工业级优化的完整解决方案,帮助开发者应对各种性能挑战。

weixin_29189373的博客 406

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1648

预编译头文件(precompiled header)使用经验

预编译头文件是被很多编译器用来编译稳定的代码以及将编译好的稳定代码存储在二进制文件中用于提升编译性能。在随后的编译中,编译器将加载存储状态继续编译指定的文件。每一个随后的编译将更快,因为稳定的代码不需要再次编译。预编译头文件应该将稳定和静态(译者注:例如,Qt库头文件、第三方库头文件、自定义的不经常改动的头文件)的代码包含在你工程中详细可以(参考:https://jingyan.baidu.com/article/ab69b270b82c352ca7189fbe.html) qmake中可以...

weinkym的博客 1948

开发板的使用

一、开发板使用学习大纲。 1、开发板组成、核心板资源,底板资源。 2、开发板连接、调试工具、串口参数配置。 3、开发板启动过程。 4、文件传输 1)使用串口传输。 上传/下载 2)使用网口传输。 上传/下载 5、临时/永久配置开发板IP地址。 6、开发板启动脚本。 二、开发板的组成。 核心板: CPU处理器: 芯片:S5P6818(三星) 内核: ARM cortex-A53 -> 八核处理器 运行内存:512MB*2=1G nandflash:4G 底板: 电源线:5V 串口...

qq_45633736的博客 2658

linux 预编译头,VC编程-预编译头文件(precompiled header)

预编译头文件(precompiled header)今天在写程序的时候,突然发现要测试的代码是用c写的,还是用gcc编译的,可是我已经建立了测试的相关环境,没办法,只能一步步的改了,将相关的头文件、结构和变量移植以后,编译了一下(只编译了C文件),竟然出错,出错信息为:fatal error C1010: unexpected end of file while looking for preco...

weixin_31269713的博客 608

京瓷扫描驱动安装_京瓷喷头拆解和供墨原理剖析

在工业喷头打印领域,京瓷喷头作为主流喷头广泛应用于喷墨行业,目前京瓷喷头市面上销售主要有两个系列:KJ4A和KJ4B。其中KJ4A系列设计是用于油性墨水,例如UV墨水,主要用在广告领域;而KJ4B设计用于水性墨水,例如活性、分散墨水等,主要用在数码印花领域。最近我们团队对京瓷喷头进行了拆解分析,本期和大家分享一下我们对京瓷喷头拆解和喷头供墨原理的研究。京瓷喷头介绍1. KJ4A系列(油性)如下图所...

weixin_39883906的博客 1672

麦克斯韦电磁场理论

1)从知识先后上说:麦克斯韦方程组为理解光的传播、反射、折射等现象提供了理论基础。不理解基础,怎么能理解上层建筑。2)从如何学懂上说,把基础学习的越牢,越深刻,后续学习上层建筑就会水到渠成一些,不会越学越多疑问。而是越学越少疑问。

weixin_55255438的博客 2825

c++中预编译头文件问题

"fatal error C1010: unexpected end of file while looking for precompiled header directive", 今天编程出现了莫名奇妙的错误,怎么回事呢? 代码没有写错啊?---这就是预编译带来的问题,经常莫名奇妙出现编译错误,给编程带来了很多烦恼。VC的默认工程选项会自动生成一个pch文件,这个用来做什么的,我不太清楚,个人

行云流水的博客 881

两万字硬核指南!Python爬虫requests库从入门到精通:新手也能搞定所有爬取场景(附实战案例+避坑大全)

请求头是客户端发送给服务器的额外信息,比如User-Agent(浏览器类型)、Referer(来源页面)、Cookie(登录凭证)、(编码方式)等。Cookie是服务器存储在客户端的小型文本文件,包含用户的登录凭证、偏好设置等信息。浏览器会在每次请求时自动携带Cookie,服务器通过Cookie识别用户身份。代理IP是一个中间服务器,你的请求先发送到代理IP,再由代理IP发送到目标网站,目标网站只能看到代理IP的地址,看不到你的真实IP。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1496

终于搞懂了预编译头文件(precompiled header)

   预编译头文件今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: fatal error C1083: Cannot open precompiled header file: /Debug/v13_3.pch/: No suc

lzpfmh的专栏 1216

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

预编译头文件 (precompiled header)

今天碰到了一个错误, "fatal error C1010: unexpected end of file while looking for precompiled header directive"。 研究了一下,结果如下。 1. 这是因为启用了预编译的功能,关闭这个功能可以解决这个问题,但很可能带来编译效率的降低。这个功能主要是通过把不经常改动的预编译成一个PCH文件,然后下次编译则可以直

imJaron的博客 733

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[c++]令人吐血的预编译头文件(precompiled header)

使用vc的人经常遇到fatal error C1083: Cannot open precompiled header file: Debug/xxx.pch: No such file or directory,怎么rebuild all都不行,这是删除了一些中间文件的结果。所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是 以.pch为扩展名的),这个文件就称为

个人学习记录所用 1162

终于搞懂了,预编译头文件(precompiled header)

来源:VCer.net文章地址:http://vcer.net/1047209431368.html 预编译头文件 今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: fatal...

dgh18494的博客 542

预编译头文件(precompiled header)

 预编译头文件今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: fatal error C1083: Cannot open precompiled header file: /Debug/v13_3.pch/: No such file

panpan358的专栏 202

错误:预编译头文件 fatal error C1083: Cannot open precompiled header file: 'Debug

<br />今天把侯sir的一个叫Hello和MFC小DEMO弄到VS2008上跑了一下,出现这个错误:<br />fatal error C1083: Cannot open precompiled header file: 'Debug/Hello_JJH.pch': No such file or directory<br />上网上搜了一篇好文章,记录下来。其实该内容在《深入浅出MFC》里面也说得有,不过没有仔细看。<br />正文:<br />//////////////////////////

stone 1632

预编译的错误解决方法:Unexpected end while looking for precompiled header

Unexpected   end   while   looking   for   precompiled   header     这时因为该模块没有包括预编译头文件“stdafx.h”的缘故。     VC用一个stdafx.cpp包含头文件stdafx.h,然后在stdafx.h里包含大部分系统头文件,这     样编译时VC就通过编译stdafx.cpp把大部分系统头文件预编译进来了,在

Miracle_cherry的专栏 2242

令人吐血的预编译头文件(precompiled header)

使用VC的人经常遇到fatal error C1083: Cannot open precompiled header file: Debug/xxx.pch: No such file or directory,怎么rebuild all都不行,这是删除了一些中间文件的结果。所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称

D. Qiu的专栏 1524
上一篇: MFC中OnDraw与OnPaint的区别
下一篇: mfc中的隐式转换
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值