2016-05-16 154 views
8

here,據說:爲什麼我們使用`#include「stdafx.h」`而不是`#include <stdafx.h>`?

對於#include「文件名」,在同一 目錄包含的指令文件的預處理器搜索。此方法通常用於包含程序員定義的頭文件,其格式爲 。

對於#include預處理程序在實現中搜索 從屬方式,通常在由 編譯器/ IDE預先指定的搜索目錄中。此方法通常用於包含標準庫 頭文件。

雖然this wiki link表明stdafx.h是一個頭文件由visual studio IDE

stdafx.h中預先設計是一個文件,由Microsoft Visual Studio IDE嚮導生成, 描述兩個標準體系和具體項目包括經常使用但幾乎不會改變的文件 。

兼容的編譯器(例如,Visual C++ 6.0和更新版本)將 預編譯該文件以減少整體編譯時間。除非編譯選項/Yu'stdafx.h未被選中(默認爲 ),否則Visual C++將 不會在源文件中的#include「stdafx.h」之前編譯任何內容。它假定源代碼中的所有代碼都已經編譯完成並且包含該行 。

stdafx.h中的AFX代表Application Framework eXtensions。 AFX 是Microsoft Foundation Classes (MFC)的原始縮寫。儘管默認情況下使用名稱stdafx.h,但項目可能會指定一個替代名稱 。

然後

爲什麼我們使用的#include "stdafx.h"代替#include <stdafx.h>

+0

也許**其中** Visual Studio默認生成該標題可能有助於回答您自己的問題。 – WhozCraig

回答

8

A stdafx.h,stdafx.cpp pair由VS從模板生成。它駐留在相同的目錄中,其餘文件最終結束。您可能最終會專門針對您的項目進行更改。因此,我們使用""而不是<>,因爲它與第一個報價描述的目錄位於同一目錄中。

+0

好的,我在'... \ testMEX \ testMEX \ Debug'和'... \ testMEX \ testMEX'中看到'stdafx.obj','stdafx.h','stdafx.cpp',其中'testMEX'是我的控制檯應用程序項目的名稱 – sepideh

+0

所以你的意思是1-不同子文件夾中的文件'stdafx.h','stdafx.cpp','handler_stdafx.h','handler_stdafx.cpp'(.NET,ATL,Generic, C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ AppWiz' 2 - 文件'Stdafx.h','StdAfx.h','Stdafx.cpp','StdAfx。 cpp目錄的不同部分'C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensibility Projects' 3-文件'stdafx.h','stdafx.cpp'在不同的子文件夾中'( C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc'目錄中的文件'stdafx.h', – sepideh

+0

'stdafx.cpp'我的Win7x64機器中的文件(x86)\ Microsoft Visual Studio 10.0 \ DIA SDK \ Samples \ DIA2Dump'目錄都是模板。當我們在Visual Studio 2010中啓動一個新項目時,會根據項目類型和使用這些模板爲其創建一個特殊的stdafx.h文件? – sepideh

4

因爲每個項目的stdafx.h不同。正如您所引用的,#include ""將搜索當前項目的路徑,這是stdafx.h所在的位置。

使用#include <stdafx.h>將是一個巨大的錯誤,因爲它必須是在庫路徑(在所有的標準庫頭所在的位置)。這意味着你不應該修改它,或者它總是保持不變,但是對於不同的項目來說它是不一樣的。

因此,儘管它是由Visual Studio生成的,但它是特定於項目的,而不是所有項目。

相關問題