當我在Visual Studio 2010中啓動項目時,會自動生成一個名爲stdafx.h
的文件。我須要建立一個跨平臺的C ++庫,所以我不能/不能使用此頭文件。 ide
什麼是stdafx.h
用於? 我能夠刪除這個頭文件嗎? 工具
我本身也遇到了這個問題,由於我試圖建立一個簡單的骨架,但最初是在Visual Studio 2017中建立一個新的Win32程序選項。「stdafx.h」是沒必要要的,應該刪除。 而後,您能夠刪除解決方案資源管理器中的愚蠢「stdafx.h」和「stdafx.cpp」以及項目中的文件。 在它的位置,你須要放 性能
#include <Windows.h>
代替。 spa
它是一個「預編譯的頭文件」 - 您在stdafx.h中包含的任何頭文件都通過預處理,以便在後續編譯期間節省時間。 您能夠在MSDN上閱讀更多相關信息。 命令行
若是您正在構建跨平臺應用程序,請在建立項目時選中「清空項目」,Visual Studio將不會在項目中放置任何文件。 code
全部C ++編譯器都有一個嚴重的性能問題須要處理。 編譯C ++代碼是一個漫長而緩慢的過程。 資源
編譯包含在C ++文件之上的標頭是一個很是漫長而緩慢的過程。 編譯構成Windows API和其餘大型API庫的巨大標頭結構是一個很是 很是漫長的過程。 對於每個Cpp源文件來講,必須完成它,而且結束和結束是一個致命的喪鐘。 開發
這不是Windows獨有的,可是全部必須針對像Windows這樣的大型API編譯的編譯器所面臨的老問題。 get
Microsoft編譯器能夠經過稱爲預編譯頭的簡單技巧來改善此問題。 訣竅很漂亮:雖然每一個CPP文件均可以在法律上給每一個Cpp文件頂部包含的頭文件鏈帶來一些不一樣的含義(經過使用不一樣的宏#include在包含以前定義,或者經過以不一樣的順序包括標題),這一般不是這種狀況。 大多數狀況下,咱們有幾十個或幾百個包含的文件,但它們都與您的應用程序中編譯的全部Cpp文件具備相同的含義。 編譯器
若是編譯器沒必要每次都從頭開始編譯每一個Cpp文件加上其中的幾十個包含,那麼編譯器能夠節省大量時間。
技巧包括指定一個特殊的頭文件做爲全部編譯鏈的起點,即所謂的「預編譯頭」文件,它一般是一個名爲stdafx.h的文件,僅僅是出於歷史緣由。
只需按照適當的順序在stdafx.h文件中列出API的全部大標題,而後在任何有意義的內容以前使用#include "stdafx.h"
在最頂層開始每一個CPP文件(只需關於惟一容許的事情是評論)。
在這些條件下,編譯器不是從頭開始編譯,而是從已經保存的stdafx.h
中編譯全部內容的結果開始編譯。
我不認爲這個技巧是微軟編譯器獨有的,我也不認爲這是一個原創的開發。
對於Microsoft編譯器,控制預編譯頭的使用的設置由編譯器的命令行參數控制: /Yu "stdafx.h"
。 能夠想象,使用stdafx.h
文件名只是一種約定; 若是您願意,能夠更更名稱。
在Visual Studio 2010中,經過右鍵單擊CPP項目,選擇「屬性」並導航到「配置屬性\\ C / C ++ \\預編譯標題」,從GUI控制此設置。 對於其餘版本的Visual Studio,GUI中的位置將不一樣。
請注意,若是您禁用預編譯的標頭(或經過不支持它們的工具運行您的項目),它不會使您的程序非法; 它只是意味着您的工具每次都會從頭開始編譯全部內容。
若是要建立沒有Windows依賴項的庫,則能夠輕鬆地從stdafx.h文件中註釋掉或刪除#includes。 無需刪除文件自己,但顯然您也能夠經過禁用上面的預編譯頭設置來刪除文件。
「Stdafx.h」是一個預編譯的頭文件。它包含標準系統包含文件和項目特定的包含文件,這些文件常常使用但不常常更改。這樣能夠減小編譯時間和沒必要要的處理。
預編譯的頭文件stdafx.h基本上用於Microsoft Visual Studio,讓編譯器知道編譯後的文件,無需從頭開始編譯。 您能夠閱讀更多相關信息
http://www.cplusplus.com/articles/1TUq5Di1/
https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017