Visual Studio C ++包含嵌套包含文件的路径顺序

时间:2011-04-26 18:17:11

标签: c++ include

我发现文章Where does Visual Studio look for C++ header files?是一个好的开始,但我还有其他问题。 VS查找包含文件的一般顺序是(1)本地目录,(2)用/ I指定的顺序,以及(3)环境指定的顺序(INCLUDE env var或VC ++设置)。

Q1。我认为/ X选项关闭(3)。对?或者它也关闭(1)?

Q2。如果我有一个嵌套的包含文件(main.c包含inc1.h,其中包括inc2.h),其中第一个包含的文件位于其中一个/ I文件夹中,VS是否会查找从该文件开始的第二个包含文件/ I文件夹,或只是原始源文件的本地文件夹? VS2008似乎是以第一种方式运行,但我想在某处找到它。

2 个答案:

答案 0 :(得分:0)

/X选项不会禁用在本地目录中查找文件(假设您将它们包括在内"this.h"而不是<this.h>)。您可以通过创建文件

轻松测试
  #include "foo.h"
  int main() {}

创建一个空的foo.h,并使用/X标志进行编译。

对于Q2,我使用VC2010进行的测试显示其行为与VC2008相同。我做的是有一个主要的:

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

包含一个只包含

的inc1.h的文件夹inc
  #include "inc2.h"

有两个不同的inc2.h个文件;在inc中,在我的源文件的目录中有一个。我的源目录中的那个是空的,inc中的那个有一个#error指令。一般来说,你不想依赖于此。 C和C ++标准都只是在#include上说“以实现定义的方式搜索命名的源文件”。

答案 1 :(得分:0)

Q1。 /X选项确实关闭了INCLUDE var,但没有关闭本地目录(参见Q2)

Q2。 C和C ++编译器,对于嵌套的包含文件,使包含文件的位置成为当前本地目录,因此您无法将其关闭。

例如。 如果在inc.h个文件夹中找到了/I文件,并且它尝试包含这样的文件:
#include "foo/foo.h"然后它必须首先使用自己的本地目录,在所有其他/I文件夹之前,因为它们都可能有一个foo文件夹,其中包含foo.h文件和{{1}文件可能无法编译,因为它只包含错误的头文件。

我刚刚为VS2008找到了这个msdn page,似乎有一个完整的解释。