当前位置:  开发笔记 > 编程语言 > 正文

为什么Visual Studio C++甚至需要在不需要它的文件中包含"StdAfx.h"?

如何解决《为什么VisualStudioC++甚至需要在不需要它的文件中包含"StdAfx.h"?》经验,为你挑选了2个好方法。

我理解预编译的头文件正在使用"#include"StdAfx.h"并且是的,我知道我可以关闭它们.但这不是我的问题.

如果您使用预编译头文件,Visual C++要求每个 cpp文件#include"StdAfx.h",甚至是不使用StdAfx.h中任何头文件的文件.如果您忘记在一个文件中包含StdAfx.h,则会出错.但为什么?显而易见的方法就是"如果你包含StdAfx.h,那么该文件将使用它,但如果你忘记包含它,那么这些头文件就不会被包含在内." 我不明白为什么VC++会要求你在不需要的时候包含StdAfx.h.似乎它们更容易像普通的头文件一样对待它.

有什么理由需要这个吗?



1> Mark Tolonen..:

您的项目默认为"使用预编译头".如果需要,可以将单个文件设置为"不使用预编译头".

实际上,stdafx.cpp它本身与项目默认值有不同的选择:

在此输入图像描述

这个配置说的是"开始编译这个文件(stdafx.cpp),当你完成编译包含stdafx.h的语句时停止"并将预编译的信息保存为.pch文件."Visual studio也足够聪明地编译这个文件首先是可以使用的.

项目默认为:

在此输入图像描述

这个配置说的是"对于每个编译的文件,从指定的.pch中的预编译数据开始,并包含stdafx.h 之后开始编译新信息." 这很重要,为什么stdafx.h应作为文件的第一行包含在内.如果你稍后将它放在文件中,它仍然可以工作,但#include之前的任何内容都会被忽略,因为该数据不会出现在.pch中.没有#include意味着VS将扫描整个文件,寻找预编译的起始位置而不是找到它......产生错误.

如果您有一个不想使用预编译信息的文件,则可以选择该文件并覆盖它.例:

在此输入图像描述

Visual Studio不会使用预编译的信息,也不会查找要包含的标头.


这是一份合同.如果打开开关以使用预编译的头文件,则必须将stdafx.h作为第一个包含的文件.如果你不想要它,请不要使用它.如果您不喜欢它,请使用g ++或编写自己的编译器.
我知道,我正在编辑.我不在我的电脑前,想要一些截图.加OP可能不知道你可以*单独*关闭它们,这是我的观点.引用OP:[Visual C++需要*every*cpp文件到#include"StdAfx.h"]而它没有.

2> Ari0nhh..:

只是马克斯答案的补充.实际上,您不必手动包含stdafx.h在所有项目源文件中.您可以使用项目选项Forced Include Files: 在此输入图像描述

这种方式stdafx.h将自动包含在您的所有来源中.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有