关于预编译头以及StdAfx.cpp的解惑

预编译头就是将程序的头文件部分编译成一个二进制中间文件,提高整个工程的编译效率,一般以.pch格式存储。

      1. 在编译器重已经采用了时间戳的方式,为何还需要预编头呢?

        对.obj加以时间戳的方式,可以根据时间戳来决定哪些文件需要重新编译,从而提高效率。但重新编译这个文件,包括这个文件的头文件里的信息和预处理(指头文件中的预处理)都重新进行一遍,而预编译头正是解决了这个问题,将稳定的头文件内容预先编译为一个二进制中间文件。

      2. 只有头文件如何编译呢?

        编译器无法直接编译头文件,那么就需要一个CPP和结合头文件一起编译,这样就是为什么通常MFC工程中存在一个StdAfx.cpp,其内容仅仅显示:
[cpp]  view plain copy
  1. // stdafx.cpp : 只包括标准包含文件的源文件  
  2. // TurnRound.pch 将作为预编译头  
  3. // stdafx.obj 将包含预编译类型信息  
  4.   
  5. #include "stdafx.h"  
        通常将常用的头文件都放到stdafx.h头文件中。

      3. fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h" to your source?

         在MFC中编程中最常见不过的了,因为MFC工程默认采用了预编译头,之后必须在.cpp文件头部包含stdafx.h(注意一定要放在头部,不然前面的头文件会被忽略);右击我们出错的的文件可以找到证据:

                    

           如果你关闭预编译头,可以发现没有了这个error。但既然预编译头带来这么多好处,为何不使用呢?

        4. 创建属于自己的预编头(本人采用VS2005)

           (1)第一步,创建stdafx.h 和 stdafx.cpp, 将常用的头文件放入stdafx.h中(一般选择稳定的头文件,因为编译产生预编译头时间比较长),在stdafx.cpp中添加代码

[cpp]  view plain copy
  1. #include "stdafx.h"  
          (2)第二步,右击工程属性=》配置属性=》c/c++ =》预编译头,选择使用预编头, "通过文件创建/使用PCH"填写 stdafx.h

          (3)第三步,右击stdafx.h属性,配置属性=》c/c++ =》预编译头,选择创建预编译头,"通过文件创建/使用PCH"填写 stdafx.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值