- 浏览: 1559163 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (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 1473COM component(COM组件)是微软公司为了计算机 ... -
scanf的用法
2012-05-31 23:37 1419scanf()函数的用法和实 ... -
定义计算变量相对于结构体偏移量的宏
2012-05-30 22:42 2780#include <stdio.h> #incl ... -
C语言一些有用的宏定义
2012-05-30 22:36 1731C语言宏定义技巧(常用宏定义) 写好C语 ... -
C语言const
2012-05-30 14:35 1225原文地址:http://hi.baidu. ... -
C语言void指针
2012-05-29 09:50 13181.概述 本文将对void关键字的深刻含义进行解说,并 ... -
C语言中#line 宏说明
2012-05-28 09:38 1808c语言里有个很少用到的宏 #line,这个宏通常是和__LIN ... -
C语言中宏的一些特别用法
2012-05-28 09:36 1683转载 C语言中如何使用宏C(和C++)中的宏(Macro)属 ... -
C语言编译执行的全过程
2012-05-28 09:13 1189编译,编译程序读取源程序(字符流),对之进行词法和语法的分 ... -
C++新型头文件与名称空间的作用
2012-05-25 09:06 18301.20 新型头文件与名字 ... -
程序在内存中运行的奥秘
2010-07-01 12:18 1807内存管理是操作系统的核心功能,无论对于开发者还是系统管理员内存 ... -
堆和栈的区别
2010-06-29 10:56 1599栈是随函数被调用时分 ... -
原码,补码,反码(针对byte(128) = -128的问题)
2010-06-25 16:40 4060int a = 128; byte b = (byte)a; ... -
链表常见笔试题
2010-06-25 11:22 3408链表的一些常见笔试面试问题总结及代码 ... -
C与C++中struct的区别,以及C++中struct与Class的区别
2010-06-25 10:44 4152C中struct只可以放成员变量,没有访问权限限制,外部可以访 ... -
C++中的inline用法总结
2010-05-26 22:26 18749inline函数的作用 ... -
C++枚举类型用途及定义详解
2010-05-26 21:14 4542C++编程语言作为一种功 ... -
C++ Template 中的typename、class关键字区别
2010-05-19 19:27 3255在c++Template中很多地 ... -
C++与Java比较(转)
2010-04-30 23:02 4418“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概 ... -
几款常见C++编译器的比较
2010-04-30 22:58 5685另外,就我个人的一点点经验来看,vs 2005中的C++编译器 ...
相关推荐
【包含sizecbar.h sizecbar.cpp scbarg.h scbarg.cpp 四个文件及CoolTabCtrl.cpp CoolTabCtrl.h】 一、实现原理 图中两个窗口的实现类是从CControlBar派生出来的,我们并不需要从头到尾实现该类,因为Cristi Posea...
#include "stdafx.h" #include<stdio.h> #include<string.h> char prog[80],token[8]; char ch; int syn,p,m,n,sum,kk; char *rwtab[6]={"begin","if","then","while","do","end"}; void expression(); void ...
关于“stdafx.h”编译出错可以参看: https://www.cnblogs.com/yhjoker/p/8110684.html https://blog.csdn.net/DP323/article/details/80671754?utm_medium=distribute.pc_relevant.none-task-blog-2~default~...
串口数据的原理是,只要当有数据向串口发数据来时 文件列表: 串口温度数据采集并实时显示\src\... ..........................\原理.txt ..........................\readme.txt ..........................
Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具。...如果这个cpp文件包含了stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。如下是一个示例程序: #include <vld.h>
Visual Leak Detector是一款用于Visual C++的免费的内存泄露检测工具。...如果这个cpp文件包含了stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。如下是一个示例程序: #include <vld.h>
操作系统上机 实 验 报 告 " " " " " " "成绩 " " " " " " " " " " " " " " " " " "教 师:... #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "windows.h" int main(int argc, char* argv[]) {
【轻松实现VC界面Demo】 一、实现原理 图中两个窗口的实现类是从CControlBar派生出来的,我们并不需要从头到尾实现该...在stdafx.h文件中加上 #include "sizecbar.h" #include "scbarg.h" [2]开始编码 ……
四、实验条件 运行Visual c++的微机一台 五、实验步骤(程序清单): (一)、程序代码: #include "stdafx.h" #include<iostream> using namespace std; typedef int elemtype; struct list { elemtype *p; int ...
#include "stdafx.h" extern char * rwtab[]; extern char token[255]; extern int p_input; extern int p_token; extern char ch; extern char input[255]; struct{ char *result; char *ag1; char *op; char *...
#include "stdafx.h" extern char * rwtab[]; extern char token[255]; extern int p_input; extern int p_token; extern char ch; extern char input[255]; int syn=-1; int kk=1; WORD *oneword=new WORD; void ...
记得应该是16年的时候,从一个公开课看到了关于OCR方面的内容,里面讲到了通过OpenCV对身份证号码区域的剪裁以及使用Tess-Two进行文字识别,实现了对身份证号码的识别功能。...#include "stdafx.h" #include "idocr.h
第一、原理 端口扫描的原理很简单,就是建立socket通信,切换不通端口,通过connect函数,如果成功则...#include stdafx.h #include #pragma comment(lib, Ws2_32) int scant(char *Ip, int StartPort, int EndPort)
童鞋们在学习C++的时候,往往只是按照书本上的原文去强行记忆... #include stdafx.h int _tmain(int argc, _TCHAR* argv[]) { int initNum = 3; for (int i=5; i > 0; –i) { static int n1 = initNum; n1++;
#include "stdafx.h" #include "chat.h" #include "chatDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////...
如果这个cpp文件包含了stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。如下是一个示例程序: #include <vld.h> void main() { … } 接下来让我们来演示如何使用Visual Leak...
1.C++ Virtual 用法 这里只讲语法,因为讲原理比较... #include "stdafx.h" #include #include using namespace std; //base class class Animal{ public: virtual void eat(){ cout << "animal ea
shared_ptr的基本⽤法 初始化 可以通过构造函数、std::make_shared辅助函数和reset⽅法来初始化shared_ptr: #include "stdafx.h" #include <iostream> #include <future> #include <thread> using namespace std;...
//#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "string.h" #include "iostream.h" //定义“空” #define null 0 //定义“进程”结构体 struct process { char process_name[10]; ...
<br>步骤一: 新建一个基于对话框的工程,命名为demo1,打开stdafx.h文件,加入#include 从例子中把MyODBC.h,MyODBC.cpp, ODBCSet.h, ODBCSet.cpp复制到这个工程的目录下,并且加入到工程中,方法是菜单...