2012-03-01 35 views
0

如果我只包括寫Visual Studio的編譯器在哪裏搜索#includes?

#include "blah.h" 

哪兒做這個文件的編譯器搜索文件?我明白有一些限制。

如果文件不在同一個文件夾中,但在結構中的深度更深的情況下會發生什麼?如何讓編譯器查看?同樣如果它在目錄中的文件之上?或者也許在不同的分支更深?

本質上我沒有掌握如何在結構中導航。我看過一些包含如下的內容:

#include ".././foo/whatever/blah.h" 

點的含義是什麼?他們回去了,但做不同的數字意味着不同的事情?

也是基於計算機上的文件結構或解決方案資源管理器中的結構嗎?

非常感謝這個幫助,我明白這是一個基本問題 - 只是我從未學過的東西之一。

+0

有根據項目屬性的設置,這被稱爲「包含目錄「(在不同版本的VS中,它位於不同的子分支中,在vs2010中它位於配置屬性 - > VC++目錄下)。始終「include」中的點根據磁盤上的文件結構進行備份,從包含它們的源文件的位置開始(如果沒有找到,則從每個目錄的位置開始搜索「包含目錄」,但又是通過磁盤上的物理位置。 – user1227804 2012-03-01 17:54:56

回答

2

visual studio documentation on #include


爲預處理器搜索包括以下順序文件:

  1. 在同一目錄中包含#include聲明的文件。

  2. 在任何以前打開的包含文件的目錄中,它們以相反的順序打開。搜索從最後打開的包含文件的目錄開始,並繼續通過首先打開的包含文件的目錄。

  3. 沿着每個/ I編譯器選項指定的路徑。

  4. 沿着由INCLUDE環境變量指定的路徑。


您可以通過更改/我在Visual Studio項目設置(項目具體路徑)選項,並在全球的路徑Visual Studio的選項傳遞到編譯器的路徑。

路徑中的2個點向上移動一個目錄,一個點指向當前目錄。任何其他數量的點將無效。因此,您的示例路徑.././foo/whatever/blah.h本質上意味着「向上移動一層,查看文件夾foo,然後查看文件夾中的任何內容」。這種情況下的單點並不真正做任何事情。當你寫#include "a.h"a.cpp,然後預處理器在a.cpp是同一目錄下搜索a.h

此導航是基於文件的結構,而不是結構在解決方案資源管理

相關問題