[英]Why does Visual Studio C++ require including “StdAfx.h” even on files that don't need it?
我知道使用“ #include” StdAfx.h“预编译的标头在做什么,是的,我知道我可以将它们关闭。但这不是我的问题。
如果您使用的是预编译头文件,则Visual C ++要求每个 cpp文件都必须#include“ StdAfx.h”,即使文件没有使用StdAfx.h中的任何头文件。 如果您忘记在一个文件中包含StdAfx.h,那就是错误。 但为什么? 显而易见的方法是“如果包含StdAfx.h,则该文件将使用它,但是如果您忘记包含它,则将不包含那些头文件。” 我不明白为什么VC ++在不需要时会要求您包含StdAfx.h。 似乎对于他们来说,将其像普通的头文件一样容易处理。
是否有充分的理由要求这样做?
您的项目默认值为“使用预编译头”。 如果需要,可以将单个文件设置为“不使用预编译头”。
实际上, stdafx.cpp
本身具有与项目默认设置不同的选项:
这种配置的意思是“开始编译该文件(stdafx.cpp),在完成对包含stdafx.h的语句的编译时停止”,并将预编译的信息另存为.pch文件。首先使用此文件,以便可以使用。
项目默认值为:
这种配置的意思是“对于每个编译文件,从指定的.pch中的预编译数据开始,并在包含stdafx.h点之后开始编译新信息。” 这很重要,为什么要将stdafx.h作为文件的第一行包含在内。 如果稍后将其放在文件中,它仍然可以工作,但是#include之前的任何内容都将被忽略,因为该数据不会位于.pch中。 缺少#include意味着VS将扫描整个文件以查找预编译的起始位置,但找不到它...生成错误。
如果您有不想使用预编译信息的文件,则可以选择该文件并将其覆盖。 例:
Visual Studio不会使用预编译的信息,也不会寻找要包含的标头。
选择文件后,右键单击属性,转到“ C / C ++ \\ Precompiled标头”部分,并将“ Precompiled标头”设置为“不使用预编译标头”,请确保该配置(左上方)适用于当前选择的版本。
它并不总是自动选择“活动”配置。 因此您可以为非活动配置设置选项,这样您将继续遇到错误;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.