當編譯器編譯源文件(例如*.cpp
)文件時,它會創建目標文件(例如*.o
),以便稍後它將鏈接到其他文件的.o
和.so
(.lib
)文件並構成可執行文件。Visual Studio強制在項目的所有編譯單元中包含預編譯頭文件?
現在對於不編譯頭類比情況每次產生了一些.pch files,使其由接頭連接它,然後時間的文件。
現在如果在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文件中。
通過總結,這裏是我的問題:
- 爲什麼在每個.cpp文件中項目的預編譯的頭是必要的 ?
- 如何編譯頭的存在的在每個編譯單元的要求優化編譯過程?換句話說,這個要求有什麼好處? (這可能是由用戶來決定,其中包括,在不!)
- 如果預編譯的頭被納入一個.cpp文件,它使用只有2%是什麼.PCH文件,那麼剩下的98%會被添加到相應的.o文件中去?
有預編譯頭沒有標準的編譯模型。每個編譯器都定義了自己的規則和語義。 –