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

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

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

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

只有在使用预编译头文件(PCH)时,以及在#include "stdafx.h"之前没有任何内容的原因是:

除非编译选项/Yu'stdafx.h未被选中(默认情况下),否则Visual C ++将不会编译源文件中的#include“stdafx.h”之前的任何内容 。 它假设源代码中的所有代码都已经编译完成并且包含该行

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

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

兼容的编译器(例如,Visual C ++ 6.0和更新版本)将预编译该文件以减less整体编译时间。 除非编译选项/Yu'stdafx.h未被选中(默认情况下),否则Visual C ++将不会编译源文件中的#include“stdafx.h”之前的任何内容。 它假设源代码中的所有代码都已经编译完成并且包含该行。

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

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