您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-12 11:06 573 查看
VC++出现如下错误:

unexpected end of file while looking for precompiled header directive

    再比如说这么一大串:

mainframe.cpp 有错误\firstdlg.h(21) : error C2065: 'IDD_DIALOG_FIRST' : undeclared identifier

mainframe.cpp 有错误\firstdlg.h(21) : error C2057: expected constant expression

mainframe.cpp 有错误\seconddlg.h(21) : error C2065: 'IDD_DIALOG_SECOND' : undeclared identifier

mainframe.cpp 有错误\seconddlg.h(21) : error C2057: expected constant expression

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" 如果没有在第一句,就会出现第二种错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vc 头文件