预编译头文件的作用

     最近准备学习一下m8(魅族的第一款智能手机)软件开发,首先是把M8 的SDK下载下来,按照SDK说明书做完了整个工程,但是却编译不过去,晕死。出现的问题为

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

     上网一查,原来是预编译头出现了问题。魅族也不够厚道,这点也不说明一下,原来在使用了预编译头,在vs2005的项目属性-c/c++-预编译头处有个选项为/YU(使用预编译头)和/YC(创建预编译头).通过VS2005向导生成的智能设备win32工程里边带有了YC选项,而我把自都生成的文件删除了,重新添加了自己的文件,因此出现上边的问题。把/YC选项设置去掉之后,OK,没问题了,呵呵。

 

 


 

      预编译头的作用就是加快编译速度

      所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改。如果这些代码被修改,则需要重新编译生成预编译头文件。注意生成预编译头文件是很耗时间的。同时你得注意预编译头文件通常很大,通常有6-7M大。注意及时清理那些没有用的预编译头文件。

 

      虽然现在编译器都有时间戳功能,但是当文件发生改变时,编译器会编译这个文件,但是与之相关的头文件也需要重新处理,这就浪费了时间,预编译头的作用就是把一些常用的头文件生成,以后文件改变(当然是非预编译头文件里边的文件)的时候,如果改动的文件包含了预编译头里边的文件,那么就不需要重新编译这个文件了。

 

   

     如果想预编译Stdafx.h该怎么做呢,我们知道一个头文件是不能编译的。所以我们还需要一个cpp文件来生成.pch 文件。这个文件默认的就是StdAfx.cpp。在这个文件 里只有一句代码就是:#include “Stdafx.h”。原因是理所当然的,我们仅仅是要它能够编译而已,通过/Fp编译开关来指定生成的pch文件的名字。VS2005可以右击文件查看属性来更改预编译处理。

 


   

 

  预编译头使用注意事项:

  1.如果使用了/Yu,就是说使用了预编译,我们在每个.cpp文件的最开头,我强调一遍是最开头,包含 你指定产生pch文件的.h文件(默认是stdafx.h)不然就会有问题。如果你没有包含这个文件unexpected end of file,就是我上边出现的问题。

  2.如果你把pch文件不小心丢了,编译的时候就会产生很多的不正常的行为。根据以上的分析,你只要让编译器生成一个pch文件。也就是说把 stdafx.cpp(即指定/Yc的那个cpp文件)从新编译一遍。当然你可以傻傻的 Rebuild All。简单一点就是选择那个cpp文件,编译一下。OK啦! 

 

 

    


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值