我发现文章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似乎是以第一种方式运行,但我想在某处找到它。
答案 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,似乎有一个完整的解释。