VC環境下標頭檔案包含

2021-06-17 14:24:21 字數 1555 閱讀 1586

標頭檔案包含(#include)是c/c++中最基本的語法了,不過理解的不深入的話,有時候還是會帶來很大的困擾,本文總結一下vc開發環境(以vc2008為例)下包含標頭檔案的用法。

一、#include <> 與 #include "" 的區別

網上很流行的一種說法是:前者包含標準標頭檔案,後者包含自己寫的標頭檔案。我只能說大多數情況的確是這樣,但msdn給出的標準定義如下:

#include <> :預處理器首先在編譯器提供的標準頭檔案目錄下搜尋,然後去編譯器設定的包含目錄下搜尋,之後去附加目錄和工程目錄等可見目錄下搜尋;

#include "" :預處理器首先在包含此語句的檔案的同級目錄,以及所有帶有include此標頭檔案的檔案目錄下搜尋,然後後去附加目錄和工程目錄,以及標準目錄下搜尋。

也就是說,兩者最大的區別是預處理器搜尋包含標頭檔案的目錄順序不一樣,對於vc2008等環境,兩者對於標頭檔案的查詢,從結果上來說是基本相同的,只是效率的區別。

上面的解釋中提到了一大堆的路徑,那麼這些路徑都是怎麼設定的?也就是說,我們可以把頭檔案放在哪些位置,能夠讓編譯器找到呢?請看下面的講解。

二、標頭檔案包含路徑

vc環境下,標頭檔案的包含路徑有好幾種,因此經常發生從別人那裡拿過來的**編譯出錯的情況,這是因為環境和工程的配置有差別。vc環境中有以下幾種包含路徑:

1、編譯器提供的標準標頭檔案路徑,比如一些包含windows api標頭檔案的路徑,這類盡量使用#include <>;

2、編譯器設定的包含路徑,比如通過ide中「tools→options→directories→include files」設定的路徑,這些包含路徑對所有工程有效,一般是一些基礎庫如boost等的標頭檔案路徑,盡量用#include <>;

3、附加路徑,這類路徑是通過ide中「專案屬性→配置屬性→c/c++→常規→附加包含目錄」設定的,對應編譯器中/i引數的設定,盡量使用 

#include "";

4、工程路徑,指.vcproj工程檔案所在的路徑,用 

#include "";

5、相對路徑,用 

#include "";

6、系統路徑,指windows系統環境變數path中設定的路徑,用 

#include ""。

想要成功包含標頭檔案,通過以上幾種路徑都可以。

三、相對路徑

相對路徑需要重點說一下,很多時候包含標頭檔案會在這個地方產生迷惑。首先相對路徑是指相對某個檔案而言,可以理解為目標檔案相對當前檔案的路徑。windows下表示相對路徑的規則為:

1、.\ 或 ./  

表示當前目錄,或同級目錄;

2、..\ 或 ../  

表示父目錄,或上級目錄。

在vc環境中,我測試的結果是正斜槓和反斜槓為相同效果,因此應該都可以用。

如果在**中用#include語句,相對路徑是相對於包含該語句的**檔案,或所有包含這個標頭檔案的檔案而言;如果在附加路徑中設定相對路徑,是相對於當前.vcproj工程檔案而言。

四、vc環境預定義巨集

除了以上設定標頭檔案路徑的方法外,還可以借助vc環境中預定義的一些巨集來設定標頭檔案路徑,比如在附加路徑設定時使用$(projectdir)、$(solutiondir)等。

vc 標頭檔案

今天看vc 的內容,我使用的是vs2008版,編寫第乙個程式的時候在標頭檔案這裡遇到了問題,編譯時說無法開啟檔案,然後上網搜了一下,注意這裡 include是在舊的標準c 中使用。在新標準中,用 include。iostream 的意思是輸入輸出流。include是標準的c 標頭檔案,任何符合標準的...

精確包含標頭檔案

原文 將原文精簡了一下 一 只包含必需的標頭檔案。當foo.c檔案在被編譯時,第一步要做的是預處理,預處理的最終結果可以看作是將stdio.h和time.h中的內容全部放到foo.c檔案中,當然,如果stdio.h和time.h中又包含其它的標頭檔案的話,它們也都全部會被放入到最終的foo.c檔案中...

C 標頭檔案包含

c 編譯是一件非常費時的事情,為了盡量的減少編譯時間,必須更好的包含標頭檔案。下面有幾條很重要的教條,可以參考。1 在標頭檔案中能用類前置宣告代替標頭檔案包含的就用前置宣告。因為使用類前置宣告,當引用的類發生改變時,當前檔案不需要重新編譯。a 必須要包含標頭檔案的情況 a繼承c,a類的標頭檔案中必須...