2

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

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

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

4

3 回答 3

3

仅在使用预编译标头 (PCH) 时才是正确的,并且在 the 之前不应有任何内容的原因#include "stdafx.h" 是:

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

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

于 2013-04-16T15:20:14.310 回答
2

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

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

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

于 2013-04-16T15:21:38.590 回答
0

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

于 2013-04-16T15:24:40.430 回答