亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

VisualStudio中使用的“stdafx.h”是什么?

VisualStudio中使用的“stdafx.h”是什么?

VisualStudio中使用的“stdafx.h”是什么?名為stdafx.h在VisualStudio 2010中啟動項目時自動生成。我需要一個跨平臺的C+庫,所以我不能/不能使用這個頭文件。是什么stdafx.h用來?我可以刪除這個頭文件嗎?
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

所有C+編譯器都有一個嚴重的性能問題需要處理。編譯C+代碼是一個漫長而緩慢的過程。

編譯C+文件頂部包含的標題是非常漫長而緩慢的過程。編譯構成WindowsAPI和其他大型API庫一部分的大型頭結構是非常非常漫長而緩慢的過程。每一個CPP源文件都要重復一遍,一遍又一遍,這是一個喪鐘。

這并不是Windows獨有的問題,而是所有必須針對Windows這樣的大型API進行編譯的編譯器所面臨的老問題。

microsoft編譯器可以通過一個名為預編譯頭..訣竅是相當巧妙的:雖然每個CPP文件都有可能并且合法地賦予每個CPP文件頂部包含的頭文件鏈不同的含義(比如在包含之前定義不同的宏,或者按不同的順序包含頭),但情況通常并非如此。大多數情況下,我們有幾十個或數百個包含的文件,但它們都是為了對您的應用程序中正在編譯的所有CPP文件具有相同的含義。

如果編譯器不必每次都開始編譯每個CPP文件,再加上它的幾十個包含的內容,那么編譯器就可以節省大量的時間。

技巧包括指定一個特殊的頭文件作為所有編譯鏈的起點,所謂的“預編譯頭”文件,通常是一個名為stdafx.h只是出于歷史原因。

只需按照適當的順序在stdafx.h文件中列出API的所有大型頭,然后用#include "stdafx.h",在任何有意義的內容之前(之前只允許評論)。

在這種情況下,而不是開始從頭開始,編譯器將從已保存的編譯結果開始編譯stdafx.h.

我不相信這個技巧是微軟編譯器獨有的,我也不認為它是一個原創的開發。

對于Microsoft編譯器,控制預編譯頭使用的設置由編譯器的命令行參數控制:/Yu "stdafx.h"..正如您可以想象的,使用stdafx.h文件名只是一種約定;如果您愿意,可以更改名稱。

在VisualStudio 2010中,通過右鍵單擊CPP項目,選擇“Properties”并導航到“Configuration Properties\C/C+\預編譯頭”,從GUI控制此設置。對于其他版本的VisualStudio,GUI中的位置將有所不同。

請注意,如果禁用預編譯的標頭(或者通過不支持它們的工具運行項目),這不會使程序成為非法;這意味著您的工具每次都會從頭開始編譯所有內容。

如果您正在創建一個沒有Windows依賴項的庫,您可以很容易地從stdafx.h文件中注釋掉或刪除#include。沒有必要刪除文件本身,但顯然您也可以這樣做,通過禁用上面的預編譯頭設置。


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關注
  • 1385 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號