今天在做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" 如果没有在第一句,就会出现第二种错误。

Visual C++中 #include stdafx.h 头文件的用法相关推荐

  1. 为什么我的程序中没有stdafx.h头文件?

    这是我的程序中出现的问题,stdafx.h头文件前的include下面有红色的波浪线.这个问题是我刚开始学习vs2010的时候出现的,到现在我才想着把它整理一下,虽然是小问题,但是还是值得注意一下.对 ...

  2. c语言中的stdbool.h头文件,【C语言】中的stdbool.h头文件

    C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...

  3. c++中#include“stdafx.h”

    参考: https://blog.csdn.net/weixin_41813895/article/details/79698789 问题描述: 在高版本的Visual Studio的默认设置中,会出 ...

  4. stdafx.h头文件

    #include "stdafx.h" 应写在文件的最前面,因为它之前的代码编译器会略过.stdafx的英文全称为:Standard Application Framework E ...

  5. 天祥电子avr视频中的AVR_PQ1A.h头文件

    /* 转自:http://bbs.21ic.com/icview-135766-1-1.html */ /******************************************* 文件: ...

  6. C语言中的conio头文件,C中的conio.h头文件在VC++中是什么?

    满意答案 ne9313 2013.05.25 采纳率:41%    等级:12 已帮助:6686人 conio.h不是C标准库中的头文件,其包含的函数有: cgets(char *); cprintf ...

  7. vc编程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?...

    源文: http://blog.csdn.net/monzart/article/details/6030999 解决办法 菜单--〉项目--〉设置,出现"项目设置"对话框,左边展 ...

  8. linux内核中链表代码分析---list.h头文件分析(一)

    linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17:13:14 在学习数据结构时,有一个重要的知识点就是链表.对于链表的一些基本操作,它的最好学习资料就是内核中的li ...

  9. 关于VC中的stdafx.h

    Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作.由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这 ...

最新文章

  1. ARM CPU神经网络自动调度
  2. Linux 操作系统原理 — 内存 — 基于 MMU 硬件单元的虚/实地址映射技术
  3. stm32阶段总结笔记一
  4. esmini LongSpeedAction修改
  5. win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程
  6. 专题导读:新基建环境下的数据资产价值评估与定价
  7. (25)System Verilog类外约束类内变量
  8. es查询两列相减大于某个值的数据_南京师范大学汇编语言期末试卷
  9. Redis笔记(五)Redis的事务
  10. c语言素数环实验报告,c语言素数环问题实例讲解
  11. 张量分解在无线通信和MIMO雷达中的概述
  12. 三四五线城市商机无限,但创业更适合在一线城市
  13. C/C++实现贪吃蛇游戏
  14. 同步调用、异步调用、回调的简单理解
  15. 怎么去除新装修房子的甲醛
  16. python3的基本数据类型_python3基本数据类型
  17. 服务器常用的操作系统
  18. win7通过远程桌面连接win10失败解决方法
  19. 基于Android平台的手机安全助手的设计与实现
  20. CEX暴雷怎么办 一文读懂加密钱包产业现状

热门文章

  1. Mysql 取用逗号分隔的字串的子串的方法:SUBSTRING_INDEX
  2. Astyle 一键格式化项目代码
  3. hdu4565之矩阵快速幂
  4. android关于socket编程,以聊天为例【转】http://hi.baidu.com/yaoyuanhuajx/item/9b93d7565f315ba9acc857d7...
  5. [原创]Enterprise Architecture V7.5 C++代码生成时,头文件中函数声明没有注释,CPP中函数定义却有注释。...
  6. 如何:将 TraceSource 和筛选器与跟踪侦听器一起使用(转载)
  7. 游三圣乡山中湖岛有感
  8. c#多线程操作界面控件的简单实现
  9. hadoop-09-安装资源上传
  10. ROS机器人程序设计(原书第2版)2.3 理解ROS开源社区级