簡體   English   中英

Visual Studio C ++包含的包含文件的包含路徑順序

[英]Visual Studio C++ include path order for nested include files

我找到了文章Visual Studio在哪里尋找C ++頭文件? 是個好的開始,但我還有其他問題。 VS查找包含文件的一般順序是(1)本地目錄,(2)用/ I指定的文件,以及(3)環境指定的文件(INCLUDE env var或VC ++設置)。

Q1。 我認為/ X選項已關閉(3)。 對? 還是也關閉(1)?

Q2。 如果我有一個嵌套的包含文件(main.c包含inc1.h,其中包括inc2.h),其中第一個包含的文件位於一個/ I文件夾中,那么VS是否會從該文件中查找第二個包含的文件/ I文件夾,還是原始源文件的本地文件夾? VS2008似乎是第一種方式,但是我想在某個地方找到它的文檔。

/X選項不會禁止在本地目錄中查找文件(假設您將其包含為"this.h"而不是<this.h> )。 您可以通過創建文件來輕松測試

  #include "foo.h"
  int main() {}

創建一個空的foo.h ,並使用/X標志進行編譯。

對於第二季度,我對VC2010的測試表明它的行為與VC2008相同。 我所做的主要是:

  #include "inc1.h"
  int main() {}

與包含inc1.h的文件夾inc

  #include "inc2.h"

具有兩個不同的inc2.h文件; inc和我的源文件的目錄中。 我的源目錄中的一個是空的, inc中的一個是一個#error指令。 通常,您不想依賴於此。 C和C ++標准都簡單地在#include說“以實現定義的方式搜索命名的源文件”。

Q1。 /X選項不會關閉INCLUDE var,但不會關閉本地目錄(請參閱Q2)

Q2。 對於嵌套的包含文件,C和C ++編譯器將包含文件的位置設置為當前本地目錄,因此無法將其關閉。

例如。 如果在/I文件夾之一中找到您的inc.h文件,並且它嘗試包含這樣的文件:
#include "foo/foo.h"那么它必須先使用其自己的本地目錄,然后再使用所有其他/I文件夾,因為它們可能都包含帶有foo.h文件的foo文件夾,而您的inc.h文件可能無法編譯因為它只是包含了錯誤的頭文件。

我剛剛找到了VS2008的msdn頁面 ,其中似乎有完整的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM