我想知道为什么每一个MFC应用程序都存在这一行(强制使stdafx.h成为每个文件中包含的第一个头):
#ifndef __AFXWIN_H__
#error "include 'stdafx.h' before including this file for PCH"
#endif
这种行为背后的原因是什么?
答案 0 :(得分:3)
只有在使用预编译标题(PCH)时才会出现这种情况,并且#include "stdafx.h"
之前不应该有任何内容的原因是:
在#include“stdafx.h”之前,Visual C ++不会编译任何内容 源文件,除非未选中编译选项/Yu'stdafx.h' (默认情况下);它假设源中的所有代码都包括在内 该行已编译
答案 1 :(得分:2)
您应该阅读此简要说明stdafx.h
兼容的编译器(例如,Visual C ++ 6.0和更新版本)将 预编译此文件以减少整体编译时间。 Visual C ++会 在源代码中的#include“stdafx.h”之前没有编译任何东西 文件,除非编译选项/Yu'stdafx.h'未选中(通过 默认);它假设源中的所有代码都包括在内 line已经编译好了。
它隐含地说,为了实现PCH的优势,您必须尽快在包含层次结构中包含stdafx.h
。
答案 2 :(得分:0)
stdafx.h
文件包含项目中不同文件使用的公共标题。它不是必须包含它,但是你必须管理项目中的所有标题,这将导致在不同的文件中重复一些标题。