为什么stdfax.h应该是第一个包括MFC应用程序? [重复](Why stdfax.h sh

2019-08-31 08:30发布

这个问题已经在这里有一个答案:

  • stdafx.h中[复制]的目的 4个回答
  • StdAfx +头文件-包含的次序在MFC应用 2个回答

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

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

是什么原因(一个或多个)这种行为背后?

Answer 1:

它使用预编译头(PCH)时,和原因之前,不应该有任何的唯一真正#include "stdafx.h"是:

Visual C ++会不会编译源文件中的#include“stdafx.h中”的事情之前 ,除非编译选项/Yu'stdafx.h未选中”(默认); 它假定源代码全部直到并包括该行已经编译

从http://en.wikipedia.org/wiki/Precompiled_header



Answer 2:

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

兼容的编译器(例如,视觉C ++ 6.0和更新的版本)将预编译该文件,以降低整体的编译时间。 Visual C ++会不会编译源文件中的#include“stdafx.h中”的事情之前,除非编译选项/Yu'stdafx.h未选中”(默认); 它假定源代码全部直到并包括该行已经编译。

它含蓄地说,为实现PCH的优势,你必须包括stdafx.h尽快纳入中层级。



Answer 3:

stdafx.h的文件包括那些沿着不同的文件在项目中使用常见的头。 这不是必须的,包括,但那么你必须沿着管理项目中的所有头,这将导致重复一些头沿不同的文件。



文章来源: Why stdfax.h should be the first include on MFC applications? [duplicate]