msvc++中的預編譯頭文件pch.hpp和stdafx.h

預編譯頭文件

在 Visual Studio 中創建新項目時,會在項目中添加一個名爲 pch.h 的“預編譯標頭文件”。 (在 Visual Studio 2017 及更高版本中,該文件名爲 stdafx.h)此文件的目的是加快生成過程。 應在此處包含任何穩定的標頭文件,例如標準庫標頭(如 )。 預編譯標頭僅在它或它包含的任何文件發生更改時進行編輯。 如果只在項目源代碼中進行更改,則生成將跳過對預編譯標頭的編譯。

pch.h、pch.hpp、stdafx.h是等價的,甚至你可以在項目中修改爲自定義文件名。

來源:預編譯的頭文件 | Microsoft Learn

實際應用中,還經常把外部調用的API的頭文件編譯爲PCH,比如調用STL、調用Windows的API windows.h等等。

vs中查看預編譯頭文件

可以在vs中: 選中某個project - 右鍵 - 屬性 - c/c++ - 預編譯頭 - 預編譯頭文件,這個選項看到文件名

image-20230902171633954

在當前項目中所有cpp文件的第一行都要包含預編譯頭文件,也就是該頭文件是第一個被包含的:#include "pch.hpp"

這是使用預編譯頭的硬性規定,假如不遵守這個規定,編譯會失敗,報錯如下:

fatal error C1010: 在查找預編譯頭時遇到意外的文件結尾。是否忘記了向源中添加“#include "stdafx.h"”?

visual studio高級功能

重複地在所有源文件中添加預編譯頭文件很繁瑣,所幸的是Visual C++提供了強制在所有源文件中包含指定頭文件的選項,方法如下:選中 項目 - 右鍵 - 屬C/C++ — 高級 - 強制包含文件 ,選項添加“預編譯頭文件”即可,如下圖所示

image-20230902174750604

注意,在預編譯頭文件之後再重複包含該文件內已包含的頭文件並不會有問題,所以不必特意去掉那些重複的包含語句

.pch爲什麼這麼大?

在【屬性 - c/c++ - 預編譯頭 - 預編譯頭文件】可以設置.pch文件的路徑,一般會在obj目錄下生成一個projectname.pch文件。

由於.pch文件具有大量的符號信息,它是你的工程文件裏最大的文件。

如果你的磁盤空間有限,可以在生成事件中將.pch文件刪除。執行程序時並不需要它們

pch.hpp可以不存在

在vs的設置中指定了pch.hpp,項目中實際也可以不存在

pch.cpp

選中pch.cpp 右鍵屬性 - c/c++ - 預編譯頭,可以看到它的選項是【創建】,而其它cpp文件是【使用】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章