嘿,我最近几天一直在跟进learncpp.com的教程,他们说要在Code::Blocks的.cpp文件中注释掉“#include "stdafx.h"”。
这是必须的吗?如果你有数百个文件,并从Win7的Visual Studio更改为Linux上的Code::Blocks或将其移交给其他人使用Mac,会发生什么情况?
嘿,我最近几天一直在跟进learncpp.com的教程,他们说要在Code::Blocks的.cpp文件中注释掉“#include "stdafx.h"”。
这是必须的吗?如果你有数百个文件,并从Win7的Visual Studio更改为Linux上的Code::Blocks或将其移交给其他人使用Mac,会发生什么情况?
stdafx.h
是Visual Studio生态系统中用于预编译头文件的惯用名称。简言之,它是一个常规头文件,但是该文件的内容将被编译一次并在项目中所有cpp文件中重用。
这个特性非常有用,因为在大多数项目中,大量的头文件(标准库、系统头文件、共享的项目级别定义)被几乎所有的翻译单元(cpp)使用,因此使用PCH在编译期间带来了巨大的性能提升。
(实际上,PCH是一种解决C++编译和链接模型低效的hack技术,我们需要手动维护它有些遗憾...哎呀,说错话了!)
但这也意味着只要你的stdafx.h
的内容与gcc兼容,使用CodeBlocks进行编译应该仍然有效,但不会立即获得性能提升。
由VS'应用程序向导生成的stdafx.h
不能直接在其他平台上使用——通常包括Windows.h
。因此,为了使它能够正常工作,需要使用适当的#ifdef/#endif
对Windows特定的定义进行保护,在Linux或Mac特定的代码区域也需要做同样的处理。
stdafx.h
根本不会破坏任何东西。Visual Studio编译器中的预编译头系统是有意设计成这样的。stdafx.h
进行预编译。stdafx.h
将被解释为普通的头文件,与任何其他头文件没有区别,并且与任何其他头文件一样处理。stdafx.h
经常包含一些Windows特定的头文件,在其他平台上不存在。虽然这是可能的,但这实际上与stdafx.h
本身无关。显然,如果您在其他平台上编译程序,无论是通过stdafx.h
还是其他地方,都不应尝试包含任何Windows头文件。stdafx.h
是一个仅适用于Windows的文件(用于预编译头文件):如果您不将其注释掉,您的代码将无法编译通过。如果您实际上没有使用预编译头文件(PCH),我建议进入Visual Studio的选项/首选项->预编译头文件
并将其关闭。如果您尝试删除它们并仍然使用Visual Studio,则会出现大量错误。