## 預編譯頭文件 在 Visual Studio 中創建新項目時,會在項目中添加一個名為 pch.h 的“預編譯標頭文件”。 (在 Visual Studio 2017 及更高版本中,該文件名為 stdafx.h)此文件的目的是加快生成過程。 應在此處包含任何穩定的標頭文件,例如標準庫標頭(如 ) ...
預編譯頭文件
在 Visual Studio 中創建新項目時,會在項目中添加一個名為 pch.h 的“預編譯標頭文件”。 (在 Visual Studio 2017 及更高版本中,該文件名為 stdafx.h)此文件的目的是加快生成過程。 應在此處包含任何穩定的標頭文件,例如標準庫標頭(如
pch.h、pch.hpp、stdafx.h是等價的,甚至你可以在項目中修改為自定義文件名。
實際應用中,還經常把外部調用的API的頭文件編譯為PCH,比如調用STL、調用Windows的API windows.h等等。
vs中查看預編譯頭文件
可以在vs中: 選中某個project - 右鍵 - 屬性 - c/c++ - 預編譯頭 - 預編譯頭文件,這個選項看到文件名
在當前項目中所有cpp文件的第一行都要包含預編譯頭文件,也就是該頭文件是第一個被包含的:#include "pch.hpp"
這是使用預編譯頭的硬性規定,假如不遵守這個規定,編譯會失敗,報錯如下:
fatal error C1010: 在查找預編譯頭時遇到意外的文件結尾。是否忘記了向源中添加“#include "stdafx.h"”?
visual studio高級功能
重覆地在所有源文件中添加預編譯頭文件很繁瑣,所幸的是Visual C++提供了強制在所有源文件中包含指定頭文件的選項,方法如下:選中 項目 - 右鍵 - 屬C/C++ — 高級 - 強制包含文件 ,選項添加“預編譯頭文件”即可,如下圖所示
註意,在預編譯頭文件之後再重覆包含該文件內已包含的頭文件並不會有問題,所以不必特意去掉那些重覆的包含語句
.pch為什麼這麼大?
在【屬性 - c/c++ - 預編譯頭 - 預編譯頭文件】可以設置.pch文件的路徑,一般會在obj目錄下生成一個projectname.pch文件。
由於.pch文件具有大量的符號信息,它是你的工程文件里最大的文件。
如果你的磁碟空間有限,可以在生成事件中將.pch文件刪除。執行程式時並不需要它們
pch.hpp可以不存在
在vs的設置中指定了pch.hpp,項目中實際也可以不存在
pch.cpp
選中pch.cpp 右鍵屬性 - c/c++ - 預編譯頭,可以看到它的選項是【創建】,而其它cpp文件是【使用】