stdafx.h和stdafx.cpp的一些解释

1.  stdafx.h头文件是干什么用的呢?

预编译是为了提高编译速度!
  • 编译入预编译头的.h,.c,.cpp文件在整个编译过程中,只编译一次,如预编译头所涉及的部分不发生改变的话,在随后的编译过程中此部分不重新进行编译。进而大大提高编译速度,且便于对头文件进行管理,也有助于杜绝重复包含问题。
  • 在MFC项目中,一般都会包含stdafx.h和stdafx.cpp文件,MFC项目要使用的头文件比如windows.h等都比较大,如果每个.cpp文件都要包含这些头文件的话,编译的时候速度就会很慢.
  • 所以微软采取了这样一个策略。在stdafx.h中默认包含了这些头文件,在编译之前会采用预编译的方法。也就是先把这些头文件所包含的信息编译成二进制文件储存起来,储存的文件后缀名为.pch。所以这个文件通常比较大,因为包含的信息较多。
  • 有stdafx.h头文件,还会有一个stdafx.cpp文件,这样编译器在遇到这个文件时,就会先进行预编译处理。这样其他cpp文件只需要包含stdafx.h头文件就可以使用MFC的头文件了。

2.  什么时候使用预编译头?

  • 当大多数.c或.cpp文件都需要相同的头文件时。
  • 当某些代码被大量重复使用时。
  • 当导入某些不同库都有实现的函数,并产生混乱时。

3.   为什么每个.cpp文件都需要在最上面包含stdafx.h这个文件呢?

编译器在编译的时候,在遇到 #include "stdafx.h" 这句之前都认为是预编译的,所以就不会再进行编译了。所以如果把一些 include 信息写在这句之前就可能产生一些找不到头文件中的生命的错误。

4.  stdafx.h,stdafx.cpp文件如何创建?

(1) 用VS新建项目,选择【Win32】-【Win32控制台应用程序】- 输入名称:Test -【确定】

  再选【下一步】- 一般,我们都是在【空项目】前打上对勾,建立一个纯的C或C++程序。 这里选择默认,即【预编译头】前打上对勾,之后【完成】

(2) 在Test项目中,头文件有stdafx.h和targetver.h,源文件有stdafx.cpp和Test.cpp,还有一个ReadMe.txt文件。

(3) 默认的主函数为:
#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

而我们一般写的程序是下面的形式:
#include  <stdio.h>

int main()
{
       return 0;
}

我们要纠结,这里怎么没有stdio.h了呢,取而代之的是stdafx.h?
打开stdafx.h文件,这里包含了stdio.h库文件,如下:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#include "targetver.h"

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



// TODO: 在此处引用程序需要的其他头文件

stdafx.cpp文件:里面只有包含的库文件,没有操作。
// stdafx.cpp : 只包括标准包含文件的源文件
// Test.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息

#include "stdafx.h"

// TODO: 在 STDAFX.H 中
// 引用任何所需的附加头文件,而不是在此文件中引用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值