相关文章推荐
骑白马的毛巾  ·  Spatie ...·  1 年前    · 

stdafx.h和pch.h头文件说明

stdafx.h和pch.h都是在Windows平台上使用的预编译头文件。都是Microsoft Visual Studio 中自动生成。注意,其他编译器不支持,Microsoft Visual Studio 专用(需要)。

在Visual Studio中,stdafx.h是用于预编译头文件的文件名。当你创建新的项目时,该文件会自动生成,并包含一些常见的头文件,可以加快编译过程,减小编译时间。可以在stdafx.h中包含一些你需要用到的公共头文件。

而在Visual Studio 2017及更高版本中,则将预编译头文件的文件名更改为了pch.h,功能与stdafx.h类似,只是名称不同而已。

// 如果您使用的是Microsoft Visual Studio,请请保留下面这一行:
// #include "stdafx.h"  //VS2017以后版本 将"stdafx.h" 换成"pch.h"
#include <iostream>
using namespace std;
int main(){
     cout << "Hello World!";
     return 0;
                                    预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的MFC实现文件第一条语句都是:#include "stdafx.h"。在它前面的所有代码将被忽略,所以其他的头文件应该在这一行后面被包含。否则,你将会得到“No such file or directory”这样让你百思不得其解的错误提示。
                                    一、预编译头文件使用经验:如果预编译头文件被正确使用时,它确实大大提高我们编程的效率(你工作中,有多少时间是在等编译完成?很多吧,这个时候一般都很无聊,无奈,浪费时间)。但是他太容易用错了. 下面是几种常见的错误用法.1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以)原因:自己的头文件一般会经常变, 便利后导致预编译的东东重新编译, 降低了编
                                    预编译的头文件
在 Visual Studio 中创建新项目时,名为pch.h的预编译头文件将添加到项目中。(在 Visual Studio 2017 及更早版本中,该文件称为stdafx.h。)该文件的目的是加快构建过程。任何稳定的头文件,例如标准库头文件,如,都应该包含在此处。预编译的头文件只有在它或它包含的任何文件被修改时才会被编译。如果您只对项目源代码进行更改,则构建将跳过对预编译头文件的编译。<vector>
预编译头文件的编译器选项是/Y。在项目属性页中,选项位于Configur
                                    vs2017/2019中pch.h和pch.cpp是个什么东西vs2017/2019中pch.h和pch.cpp是个什么东西vs2017/2019中pch.h和pch.cpp是个什么东西
说实话,它真是不个东西,很多时候就因它报错
一 一般规则
一般规则:不要删除 pch.h/.cpp;不要修改 pch.cpp;在其它 .cpp 中首先 #include “pch.h”
预编译头,把一个基本不改变的头文件,编译成类似库的一个中间件,然后其他编译单元编译时就不需要去解析编译那个头文件了,而是直接
WIN7+VS2015。
由于以前也没有读源代码的经验,看了看网上大神们给的一些套路,觉得也是一般,所以呢。我决定就按照源代码文件的排序,从a~z依次读下来。
是不是跟许三多读书的节奏有一点像?
第一个文件
afxabort.cpp
上面的英文是说,这个源代码就是为微软的基础类们提供了参考,并且这个源代码是与随着库提供的电子文档是有关联的。要详细查看这个资
                                    Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。  
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:   
◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程
                                    预编译头文件今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有,就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。结果不能编译了,我靠:fatal error C1083: Cannot open precompiled header file: /Debug/v13_3.pch/:No such file or dir
// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
#if !defined(AFX_STDAFX_H__C4B5DA9B_21EA_47D6_9253_A4245E58FBF5__INCLUDED_)
#define AFX_STDAFX_H__C4B5DA9B_21EA_47D6_9253_A4245E58FBF5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__C4B5DA9B_21EA_47D6_9253_A4245E58FBF5__INCLUDED_)
                                    这是一个xp mainfest的效果bug,具体问题在
http://topic.csdn.net/u/20100618/17/1f37d032-8aa6-497b-8b11-d2825dc85c39.html
欢迎大家讨论
简要描述:
准备工作:用vc2005或者更高创建一个mfc对话框程序,弄了一个最简单的按钮类,继承自CButton,给他添加一个CToolTipCtrl
问题现象:1.鼠标移动到按钮上,会显示之前设置的tooltips,反复移动移出,tooltips都有效
  2.然后按一下按钮,tooltips消失,再也不会出现
                                    这段时间集中解决了一个stdafx的问题, 一点零散总结
  预编译头文件(扩展名为.PCH)是把一个工程中较稳定的代码预先编译好放在一 个中间形式的文件中(PCH文件),编译器可以更加快捷的使用这个文件,减少编译时间。预先编译好的代码可以是任何的C/C++代码。
预编译头文件的目的就是提高编译速度。编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件...
                                    新版的VS2017在新建了一个项目之后,会自动生成如下代码
// ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include "pch.h"
#include <iostream>
int main()
    std::cout << "Hello World!\n"; 
// 运...