首页 文章

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

提问于
浏览
0

我发现文章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

    /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 上说"the named source file is searched for in an implementation-defined manner" .

  • 0

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

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

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

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

相关问题