【问题标题】:Why stdfax.h should be the first include on MFC applications? [duplicate]为什么 stdfax.h 应该是 MFC 应用程序的第一个包含? [复制]
【发布时间】:2013-04-09 01:45:22
【问题描述】:

我想知道为什么每个 MFC 应用程序都存在这条线(这迫使 stdafx.h 成为每个文件中包含的第一个标头):

#ifndef __AFXWIN_H__
    #error "include 'stdafx.h' before including this file for PCH"
#endif

这种行为背后的原因是什么?

【问题讨论】:

标签: c++ visual-studio mfc


【解决方案1】:

stdafx.h 文件包括用于项目中不同文件的通用头文件。不一定要包含它,但是您必须管理项目中的所有标题,这将导致在不同文件中重复一些标题。

【讨论】:

    【解决方案2】:

    你应该阅读这个简短的描述stdafx.h

    兼容的编译器(例如,Visual C++ 6.0 和更高版本)将 预编译此文件以减少总体编译时间。 Visual C++ 将 在源代码中的#include "stdafx.h" 之前不编译任何东西 文件,除非编译选项 /Yu'stdafx.h' 未选中(通过 默认);它假定源代码中的所有代码都包括在内 行已经编译。

    它含蓄地说,要实现 PCH 的优势,您必须尽快将 stdafx.h 包含在包含层次结构中。

    【讨论】:

      【解决方案3】:

      只有在使用预编译头 (PCH) 时才成立,#include "stdafx.h" 之前不应该有任何内容的原因是:

      Visual C++ 不会在 #include "stdafx.h" 之前编译任何内容 源文件,除非编译选项 /Yu'stdafx.h' 未选中 (默认);它假定源代码中的所有代码,包括 该行已经编译

      来自http://en.wikipedia.org/wiki/Precompiled_header

      【讨论】:

      • 谢谢,MSDN.com 在这件事上并没有真正的帮助...
      猜你喜欢
      • 2014-12-16
      • 2011-08-18
      • 2011-11-16
      • 2021-12-04
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2017-01-05
      • 2011-11-18
      相关资源
      最近更新 更多