我第一次遇到了预编译头文件,改变了我的生活.我不能相信编译我的C代码可能是那么快.它现在完全有意义..
无论如何,有一件令我困惑的事情是,从目前为止所读到的,预编译的头文件只能添加到源文件(cpp?)中.
在Visual Studio中,项目属性 – > C/C++ – >高级 – “强制包含文件”之间有一个选项.我将该编译器选项设置为stdafx.h.
在这样做之后,我不再需要包括我添加到我的stdafx.h的头,甚至在我的头文件(源文件应该自动包括stdafx.h).这是预期的行为吗?
如果它是有益的,但我恐怕这是另一个风险投资者可以让你离开的东西,但会在GCC中崩溃.是的,需要便携;至少在GCC和VC之间.
解决方法
StdAfx.h真的应该只包含在源文件中,而不是标题.我建议您在每个cpp中首先包含“StdAfx.h”,而不使用“强制包含文件”选项.这是我如何使用我的跨平台项目.为了记录,我实际上并没有在GCC中使用预编译的头文件,我只是正常地构建它,它的工作正常.
对于一些背景编译器只查看源文件(即* .cpp,* .c等),因此当编译它时,它必须包含每个标题并编译头文件中找到的任何代码.预编译头选项允许一次编译所有代码(即,StdAfx.h中的全局include’d代码),以便您不必一直执行此操作.这是什么StdAfx.cpp.编译器将StdAfx.cpp与StdAfx.h中包含的所有代码编译一次,而不必每次构建时都执行此操作.
因此,由于在每个源文件中包含StdAfx.作为第一个项目,因此将它们包含在StdAfx.h中,因此将可以访问所有代码在StdAfx.h.此外,您可以在其他项目中使用这些标题,而无需担心StdAfx.h或包含错误的标题.