Visual Studio强制在项目的所有编译单元中包含预编译的头文件?

Nar*_*rek 4 c++ compiler-construction linker precompiled-headers visual-studio-2008

当编译器编译源(例如*.cpp)文件时,它会创建目标文件(例如*.o),以便稍后它将链接到其他.o.so(.libWindows文件)文件,并构成可执行文件.

现在,对于每次创建一些.pch文件时都不编译头文件的类比情况,这样它就会被链接器链接起来.

现在,如果在Visula Studio项目的范围内定义了一个预编译的头,那么为什么Visual Studio会抱怨错误(例如**fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?**)头文件未包含在.cpp文件中.

总结一下,这是我的问题:

  1. 为什么在每个.cpp文件中都需要项目的预编译头?
  2. 每个编译单元中是否存在预编译头的优化如何优化编译过程?换句话说,这个要求的好处是什么?(可能由用户决定在哪里包括,哪里不包括!)
  3. 如果预编译头包含在.cpp文件中,该文件仅使用.pch文件中的2%,则剩余的98%将被添加到相应的.o文件中?

Han*_*ant 9

为什么在每个.cpp文件中都需要项目的预编译头?

因为你要求它.如果您不想使用它,则需要更改.cpp文件的选项.右键单击它,属性,C/C++,预编译标题,"创建/使用"="不使用预编译头".默认设置为"使用".这样做没什么意义.

每个编译单元中的预编译头如何优化编译过程?

不必解析#includes.当你特别有用#include <windows.h>.在具有数百个.cpp文件的大型项目中,节省的时间大约为秒,这些文件可累计达数分钟.到目前为止,它是加速编译器的最便宜的方式,不会降低生成代码的质量.

然后剩余的98%将被添加到相应的.o文件中?

当然不是.