Visual C++中 #include "stdafx.h" 头文件的用法

今天在做VC++实验时,总是出现莫名其妙的错误。比如说:

unexpected end of file whilelooking for precompiled header directive

   再比如说这么一大串:

mainframe.cpp 有错误\firstdlg.h(21) :error C2065: 'IDD_DIALOG_FIRST' : undeclared identifier
mainframe.cpp 有错误\firstdlg.h(21) : error C2057: expected constantexpression
mainframe.cpp 有错误\seconddlg.h(21) : error C2065:'IDD_DIALOG_SECOND' : undeclared identifier
mainframe.cpp 有错误\seconddlg.h(21) : error C2057: expected constantexpression
MainFrame.cpp 有错误\MainFrm.cpp(25) : error C2065: 'ID_TEST_DLG' :undeclared identifier
MainFrame.cpp 有错误\MainFrm.cpp(26) : error C2065: 'ID_TEST_DLG1' :undeclared identifier
MainFrame.cpp 有错误\MainFrm.cpp(58) : error C2065: 'IDR_MAINFRAME' :undeclared identifier

  研究了好久,终于发现了错误原因,原来全都是#include "stdafx.h" 搞的鬼。

   #include"stdafx.h" 必须是所有的CPP实现文件第一条语句,由系统自动生成。

   stdafx.h(Standard Application Framework Extensions ): 标准系统包含文件的包含文件。
   Microsoft C 和 C++编译器提供了用于预编译任何 C 或 C++代码(包括内联代码)的选项。利用此性能特性,可以编译稳定的代码体,将已编译状态的代码存储在文件中,以及在随后的编译中,将预编译的代码与仍在开发的代码结合起来。由于不需要重新编译稳定代码,因此后面每次编译的速度都要快一些。
  预编译代码有助于在开发周期中缩短编译时间,特别是在以下情况中:
   一:总是使用不经常改动的大型代码体。
  二:程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
   三:用于创建预编译头文件的第一次编译所花费的时间比后面的编译稍长一些。通过包含预编译代码可以加快后面的编译速度。C 和 C++程序都可以预编译。在 C++编程中,常见的做法是将类接口信息分别放到不同的头文件中。此后就可以将这些头文件包含在使用该类的程序中。通过预编译这些头文件,可以缩短程序的编译时间。
  VC创建项目时自动创建的预编译头文件,在编译其他文件之前,VC先预编译此文件。头文件stdafx.h引入了项目中需要的一些通用的头文件,比如window.h等,在自己的头文件中包括stdafx.h就包含了那些通用的头文件。
  所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
  预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
  编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include"stdafx.h"前的代码都是预编译的,它跳过#include "stdafx.h"指令,使用projectname.pch编译这条指令之后的所有代码。
   因此,所有的CPP实现文件第一条语句都是:#include"stdafx.h"。

   #include"stdafx.h"如果不小心删了,就会有第一种错误;

   #include"stdafx.h" 如果没有在第一句,就会出现第二种错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值