jjzjj

c++ - 有没有办法在不需要 stdafx.h 的情况下在 C++ 中使用预编译头文件?

我有一堆遗留代码需要为其编写单元测试。它到处都使用预编译的头文件,因此几乎所有.cpp文件都依赖于stdafx.h,这使得打破依赖性以编写测试变得困难。我的第一直觉是删除所有这些stdafx.h文件,这些文件大部分包含#include指令,并根据需要将这些#include直接放在源文件中。这将有必要关闭预编译头文件,因为它们依赖于像stdafx.h这样的文件来确定预编译头文件的停止位置。有没有办法在没有stdafx.h依赖项的情况下保留预编译的头文件?有没有更好的方法来解决这个问题? 最佳答案 是的,有更好的方法。恕我直言,预编译h

msvc++中的预编译头文件pch.hpp和stdafx.h

预编译头文件在VisualStudio中创建新项目时,会在项目中添加一个名为pch.h的“预编译标头文件”。(在VisualStudio2017及更高版本中,该文件名为stdafx.h)此文件的目的是加快生成过程。应在此处包含任何稳定的标头文件,例如标准库标头(如)。预编译标头仅在它或它包含的任何文件发生更改时进行编辑。如果只在项目源代码中进行更改,则生成将跳过对预编译标头的编译。pch.h、pch.hpp、stdafx.h是等价的,甚至你可以在项目中修改为自定义文件名。来源:预编译的头文件|MicrosoftLearn实际应用中,还经常把外部调用的API的头文件编译为PCH,比如调用STL、

头文件stdafx.h的作用(常见错误),以及如何在空项目中添加该头文件

头文件stdafx.h的作用(常见错误),以及如何在空项目中添加该头文件预编译头文件stdafx.hfatalerrorC1083:无法打开包括文件:“stdafx.h”:NosuchfileordirectoryfatalerrorC1083:无法打开预编译头文件:“Debug\Win32RegistryClass.pch”:NosuchfileordirectorywarningC4627:“#include"..\stdafx.h"”:在查找预编译头使用时跳过fatalerrorC1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include"stdafx.h"”?

c++ - 什么是在 Visual Studio 2012 的新 C++ 项目中自动创建的 stdafx.cpp 文件

据我了解,stdafx.h是一个预编译的头文件,用于缩短VisualStudio中的编译时间。当我在VisualStudio2012中创建一个c++项目时,还有一个stdafx.cpp。谁能解释一下stdafx.h和stdafx.cpp的关系? 最佳答案 预编译的头文件可以大大加快项目中.cpp文件的编译速度。按照惯例,stdafx.h#include包含您要预编译的所有.h文件。您可以随意命名,但项目模板只选择stdafx.h但在此之前,必须有一个.cpp文件#includesstdafx.h并首先编译。在项目中的所有其他.cpp

c++ - 什么是在 Visual Studio 2012 的新 C++ 项目中自动创建的 stdafx.cpp 文件

据我了解,stdafx.h是一个预编译的头文件,用于缩短VisualStudio中的编译时间。当我在VisualStudio2012中创建一个c++项目时,还有一个stdafx.cpp。谁能解释一下stdafx.h和stdafx.cpp的关系? 最佳答案 预编译的头文件可以大大加快项目中.cpp文件的编译速度。按照惯例,stdafx.h#include包含您要预编译的所有.h文件。您可以随意命名,但项目模板只选择stdafx.h但在此之前,必须有一个.cpp文件#includesstdafx.h并首先编译。在项目中的所有其他.cpp

c++ - Visual Studio 2010、Intellisense 和 PCH : what are the alternatives to ugly stdafx. h?

我最近切换到VisualStudio2010并且Intellisense在使用boost库时不会花半分钟时间显示出来,Microsoft'ssuggestion似乎使用了预编译的头文件。除了我以前从未使用过它们(除非被UglyATLWizards(TM)强制使用),所以我四处寻找以弄清楚它们是如何工作的。基本上,BigCentralizedstdafx.h方法似乎完全错误。我从不想在我的所有源代码中包含(甚至便宜)一大堆头文件。因为我不使用Windows库(我制作C++/CLI更高级别的包装器,然后使用.NET与外界对话),所以我没有“一大堆不变的巨大标题”。只是boost和散落在各处

c++ - Visual Studio 2010、Intellisense 和 PCH : what are the alternatives to ugly stdafx. h?

我最近切换到VisualStudio2010并且Intellisense在使用boost库时不会花半分钟时间显示出来,Microsoft'ssuggestion似乎使用了预编译的头文件。除了我以前从未使用过它们(除非被UglyATLWizards(TM)强制使用),所以我四处寻找以弄清楚它们是如何工作的。基本上,BigCentralizedstdafx.h方法似乎完全错误。我从不想在我的所有源代码中包含(甚至便宜)一大堆头文件。因为我不使用Windows库(我制作C++/CLI更高级别的包装器,然后使用.NET与外界对话),所以我没有“一大堆不变的巨大标题”。只是boost和散落在各处

c++ - 为什么我有条件地包含 stdafx.h 后会出现编译错误?

我正在尝试编写一个在BorlandC++和VisualC++中编译的程序。为此,我添加了#ifdef_MSC_VER以在VS下编译源代码时包含stdafx.h文件。代码在BorlandC++中编译和执行正常,但在VS中,它失败了:errorC1020:unexpected#endif#ifdef_MSC_VER//I'minVS#include"stdafx.h"#endif//thislinedoesn'tcompileinVS#ifdef__BORLANDC__//I'minBorland#pragmahdrstop#pragmaargsused#endif#includeintm

c++ - 为什么我们使用 `#include "stdafx.h "` instead of ` #include <stdafx.h>`?

来自here,据说:For#include"filename"thepreprocessorsearchesinthesamedirectoryasthefilecontainingthedirective.Thismethodisnormallyusedtoincludeprogrammer-definedheaderfiles.For#includethepreprocessorsearchesinanimplementationdependentmanner,normallyinsearchdirectoriespre-designatedbythecompiler/IDE.Th

c++ - 为什么 Visual Studio C++ 即使在不需要它的文件上也需要包含 "StdAfx.h"?

我了解预编译header对“#include“StdAfx.h”的作用,是的,我知道我可以关闭它们。但这不是我的问题。如果您使用的是预编译头文件,VisualC++需要每个cpp文件以#include"StdAfx.h",即使是未使用StdAfx.h中任何头文件的文件。如果您忘记在一个文件中包含StdAfx.h,则会出错。但为什么?显而易见的方法只是“如果您包含StdAfx.h,那么该文件将使用它,但如果您忘记包含它,那么这些头文件将不会被包含。”我不明白为什么VC++在不需要时会要求您包含StdAfx.h。似乎将其视为普通头文件对他们来说会更容易。为什么需要这样做有什么充分的理由吗?