为什么stdfax.h应该是MFC应用程序中的第一个包含?

时间:2013-04-16 15:13:06

标签: c++ visual-studio mfc

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

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

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

3 个答案:

答案 0 :(得分:3)

只有在使用预编译标题(PCH)时才会出现这种情况,并且#include "stdafx.h"之前不应该有任何内容的原因是:

  

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

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

答案 1 :(得分:2)

您应该阅读此简要说明stdafx.h

  

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

它隐含地说,为了实现PCH的优势,您必须尽快在包含层次结构中包含stdafx.h

答案 2 :(得分:0)

stdafx.h文件包含项目中不同文件使用的公共标题。它不是必须包含它,但是你必须管理项目中的所有标题,这将导致在不同的文件中重复一些标题。