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

Why stdfax.h should be the first include on MFC applications?


为什么stdfax.h应该是MFC应用程序上的第一个包含? 已获得3个解决方法 2020-08-19 07:08:47 c++

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

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

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


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

只有在使用预编译头 (PCH) 时才正确,在 #include "stdafx.h" 之前不应该有任何东西的原因是:

Visual C不会在 # include "stdafx.h" 之前编译任何东西在源文件中,除非未选中compile选项/yu 'stdafx.H' (默认情况下); 否则它假定源代码中所有代码 (包括该行) 已经编译完毕

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


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

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

兼容的编译器 (例如,Visual C 6.0和更新版本) 将预编译此文件,以减少总体编译时间.Visual C不会编译 # include "stdafx之前的任何东西.源文件中的h”,除非编译选项/yu 'stdafx.H' 是未选中的 (默认情况下); 它假定源中的所有代码 (包括该行) 已经编译完毕.

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


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

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


.htaccess .net .net-core 2d 3d actions-on-google actionscript-3 activemq acumatica adobe-xd aframe ag-grid air airflow ajax akka alexa algorithm alignment allure amadeus amazon-cognito amazon-deequ amazon-dynamodb amazon-ec2 amazon-redshift amazon-s3 amazon-web-services amcharts amcharts4