- 浏览: 1587810 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
刚刚用VS测试发现,include"stdafx.h"后可以不用include<iostream> using namespace std;了,这验证了本文最后红色的那几段话。不知道"stdafx.h"是怎么选择包含其它头文件的,是最常用的?貌似,还可以在它里面添加新的头文件,这些为什么没有被自动包含进来?在项目的debug里面,我发现了projectname.pch文件,有1M大。(有的程序必须在stdafx.h里面声明 include<iostream> using namespace std;才可以)
又在新的程序里测试,好像必须在stdafx.h里面声明 include<iostream> using namespace std;才可以
名称的英文全称为:Standard Application Framework Extensions
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
因此,所有的MFC实现文件第一条语句都是:#include "stdafx.h"。
详细工作原理及作用
stdafx.h中没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示:
◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFCinclude文件。且这一文件可以随被选择的选项而变化。
◎AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
◎然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
◎当VisualC++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。(扩展名pch表示预编译头文件。)
◎当VisualC++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。VisualC++不再分析Windowsinclude文件,除非你又编辑了stdafx.cpp或stdafx.h。
这个技术很精巧,你不这么认为吗?(还要说一句,Microsoft并非是首先采用这种技术的公司,Borland才是。)在这个过程中你必须遵守以下规则:
◎你编写的任何.cpp文件都必须首先包含stdafx.h。
◎如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。
◎由于.pch文件具有大量的符号信息,它是你的工程文件里最大的文件。
如果你的磁盘空间有限,你就希望能将这个你从没使用过的工程文件中的.pch文件删除。执行程序时并不需要它们,且随着工程文件的重新建立,它们也自动地重新建立。
如何理解其原理
通俗一点说
当我们使用AppWizard来自动生成某些项目的时候,系统会自动把所需要include的头文件在stdafx.h中先include一下,这样,我们只需要直接include这个stdafx.h文件即可.因为同一个项目中的不同源文件CPP都包含相同的include文件,这样,为每个.CPP文件都重复include这些文件就显得很傻了。当然如果你不用MFC的话就不用了。即:在每个.cpp文件中都include stdafx.h 就相当于包含了其他的如iostream.h等文件
与stdio.h的区别
我们一般用TC或vc编译C程序的时候都要首先包含这个stdio.h头文件,这个头文件里面包含了scanf和printf函数的定义,如果我们不在程序开头include这个文件,那么你调用上面这两个函数就不会成功,它其实和c++中的iostream.h文件的作用差不多的,它们一般都已经在stdafx.h文件中被包含。
发表评论
-
COM(Component Object Model)组件介绍
2013-01-15 17:38 1519COM component(COM组件)是微软公司为了计算机 ... -
scanf的用法
2012-05-31 23:37 1465scanf()函数的用法和实 ... -
定义计算变量相对于结构体偏移量的宏
2012-05-30 22:42 2819#include <stdio.h> #incl ... -
C语言一些有用的宏定义
2012-05-30 22:36 1768C语言宏定义技巧(常用宏定义) 写好C语 ... -
C语言const
2012-05-30 14:35 1261原文地址:http://hi.baidu. ... -
C语言void指针
2012-05-29 09:50 13621.概述 本文将对void关键字的深刻含义进行解说,并 ... -
C语言中#line 宏说明
2012-05-28 09:38 1845c语言里有个很少用到的宏 #line,这个宏通常是和__LIN ... -
C语言中宏的一些特别用法
2012-05-28 09:36 1726转载 C语言中如何使用宏C(和C++)中的宏(Macro)属 ... -
C语言编译执行的全过程
2012-05-28 09:13 1238编译,编译程序读取源程序(字符流),对之进行词法和语法的分 ... -
C++新型头文件与名称空间的作用
2012-05-25 09:06 18701.20 新型头文件与名字 ... -
程序在内存中运行的奥秘
2010-07-01 12:18 1843内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存 ... -
堆和栈的区别
2010-06-29 10:56 1650栈是随函数被调用时分 ... -
原码,补码,反码(针对byte(128) = -128的问题)
2010-06-25 16:40 4139int a = 128; byte b = (byte)a; ... -
链表常见笔试题
2010-06-25 11:22 3467链表的一些常见笔试面试问题总结及代码 ... -
C与C++中struct的区别,以及C++中struct与Class的区别
2010-06-25 10:44 4197C中struct只可以放成员变量,没有访问权限限制,外部可以访 ... -
C++中的inline用法总结
2010-05-26 22:26 18810inline函数的作用 ... -
C++枚举类型用途及定义详解
2010-05-26 21:14 4579C++编程语言作为一种功 ... -
C++ Template 中的typename、class关键字区别
2010-05-19 19:27 3323在c++Template中很多地 ... -
C++与Java比较(转)
2010-04-30 23:02 4460“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概 ... -
几款常见C++编译器的比较
2010-04-30 22:58 5727另外,就我个人的一点点经验来看,vs 2005中的C++编译器 ...
相关推荐
#### 二、`stdafx.h`的作用及工作原理 `stdafx.h`的全称是“Standard Application Framework Extensions”,顾名思义,它主要用作标准应用程序框架的扩展。通常情况下,`stdafx.h`包含了一些常用的预编译头文件(如...
下面我们将深入探讨`stdafx.h`的作用、原理以及如何使用。 首先,`stdafx.h`的"std"前缀通常代表“标准”,而"afx"是MFC(Microsoft Foundation Classes)库的一部分,用于Windows应用程序开发。MFC库是微软提供的...
在C++编程环境中,预编译头文件`stdafx.h`是一个常见的概念,特别是在使用Microsoft Visual Studio等IDE时。这个头文件的主要目的是为了提高编译效率,通过预编译一些经常改变但不常重新编译的代码,从而减少编译...
在Microsoft Foundation Class (MFC)库中,`stdafx.h`是一个非常关键的头文件,它在MFC应用程序中起着核心作用。这篇文章将深入探讨`stdafx.h`在MFC中的功能,以及它如何影响和优化编译过程。 首先,`stdafx.h`的...
6. AppWizard和Visual C++的工作原理:AppWizard建立了文件stdafx.h,包含了所有当前工程文件需要的MFC include文件。然后,AppWizard建立了stdafx.cpp文件,并将结果保存在一个名为stdafx.pch的文件里。 7. 宏定义...
理解`#include "stdafx.h"` 的作用对于编写有效且高效的C++代码至关重要。 首先,`stdafx.h` 文件的主要目的是为了提高编译速度。当项目变得庞大时,包含许多源文件,每次编译都需要处理大量的头文件,这可能导致...
- **ifndef \_\_AFXWIN\_H__**:这是一个条件编译语句,用于确保`stdafx.h`已经被包含。这是为了生成预编译头文件(Precompiled Header, PCH),从而加快编译速度。 - **DECLARE_MESSAGE_MAP()**:这是MFC...
`StdAfx.h`包含了一些常用的头文件,如`AFXWIN.h`,而`StdAfx.cpp`则包含这些头文件的预编译版本,以减少编译时间。 **文件列表总结** - `DES.APS`:这是MFC工程的编译中间文件,不包含源代码。 - `DES.clw`:...
2. `StdAfx.cpp`和`StdAfx.h`:这两个文件通常在Visual C++项目中使用,`StdAfx.cpp`编译预编译头文件`StdAfx.h`,以提高编译效率。`StdAfx.h`可能包含了常用的库引用和宏定义。 3. `rgndemo.dsp`和`rgndemo.dsw`:...
预编译头文件`stdafx.h`在C++中起着关键作用,尤其是对于大型项目,它可以提高编译速度。`#pragma once`预编译指令确保头文件只被编译一次,避免了重复包含导致的编译错误。在`stdafx.h`中,我们通常看到包含如`...
本文将围绕“YUV源码解读.docx”文档中的内容,深入解析预编译头文件(如`stdafx.h`)以及相关的预处理指令,帮助读者理解其工作原理和实际应用。 首先,我们关注`stdafx.h`文件。它是Microsoft Visual C++(VC++)...
压缩包内的文件名称列表包括:dss.clw、big.cpp、dss0.cpp、dss.cpp、StdAfx.cpp、dss.dsp、dss.dsw、big.h、StdAfx.h、Resource.h。这些文件可能是以下内容: - dss.clw:可能是一个项目的类库文件,记录了项目中类...
这个错误通常出现在尝试使用预编译头文件(stdafx.h)时,但编译器在源代码中找不到相应的#include指令。下面我们将详细解析这个问题的原因、解决方案以及如何预防此类问题。 首先,预编译头文件(如`stdafx.h`)是...
1. stdafx.cpp:通常包含预编译头文件(如stdafx.h),用于提高编译速度。 2. small.ico:可能是应用程序的图标资源。 3. MyDirectSound.cpp:这是主要的源代码文件,可能包含了DirectSound的实现,包括音频播放和...
- `StdAfx.cpp`文件负责生成预编译头文件,其内容仅为`#include "StdAfx.h"`。 - 在项目设置中,需要配置`StdAfx.cpp`的预编译头文件生成选项,以及其他C源文件的预编译头文件使用选项。 综上所述,预编译头文件是...
【包含sizecbar.h sizecbar.cpp scbarg.h scbarg.cpp 四个文件及CoolTabCtrl.cpp CoolTabCtrl.h】 一、实现原理 图中两个窗口的实现类是从CControlBar派生出来的,我们并不需要从头到尾实现该类,因为Cristi Posea...
这个压缩包包含了四个文件:BASE64.cpp、StdAfx.cpp、StdAfx.h和BASE64.h,这些都是开发C++程序时常见的文件。 1. **BASE64.cpp**:这个文件通常包含Base64编码和解码的函数实现。在Base64中,每3个字节(24位)的...
- "Sd.cpp"和"StdAfx.cpp"是C++源代码文件,"Sd.cpp"可能包含了主要的程序逻辑,而"StdAfx.cpp"通常包含了预编译的头文件(StdAfx.h)的内容,以提高编译速度。 - "Sd.dsp"和"Sd.dsw"是Visual Studio的项目文件,...
3. StdAfx.cpp 和 StdAfx.h:在Visual C++项目中,这些文件通常用于预编译头文件,以提高编译效率。 4. 7CRCfile.dsp 和 8CRCfile.dsw:这是两个旧版的Microsoft Visual Studio项目文件,分别对应于Visual Studio 6...
3. **StdAfx.cpp** 和 **StdAfx.h**:这两个文件与预编译头文件有关,可以提高大型项目的编译速度。`StdAfx.h`包含了项目常用的一些头文件,而`StdAfx.cpp`则是预编译这些头文件的实现。 4. **pop3connection.dsp**...