c++ - Visual Studio 的编译器在哪里搜索#includes?

标签 c++ visual-studio visual-c++ include c-preprocessor

如果我只是通过写入来包含一个文件

#include "blah.h"

编译器到底在哪里搜索这个文件?我知道有限制。

如果文件不在同一个文件夹中,但在结构中更深的位置,会发生什么情况,我如何告诉编译器去那里查找?同样,如果它在目录中的文件之上?或者在不同的分支中更深入?

基本上我不了解您如何在结构中导航。我见过一些看起来像这样的包含:

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

这些点是什么意思?他们回去了,但不同的数字意味着不同的事情吗?

另外,这是基于计算机上的文件结构还是解决方案资源管理器中的文件结构?

非常感谢您在这方面的帮助,我知道这是一个有点基本的问题 - 只是我从未学过的事情之一。

最佳答案

来自visual studio documentation on #include


预处理器按以下顺序搜索包含文件:

  1. 与包含#include 语句的文件位于同一目录中。

  2. 在任何先前打开的目录中,包含文件的顺序与打开顺序相反。搜索从最后打开的包含文件的目录开始,一直到最先打开的包含文件的目录。

  3. 沿着每个/I 编译器选项指定的路径。

  4. 沿着 INCLUDE 环境变量指定的路径。


您可以通过 visual studio 项目设置中的/I 选项(针对项目特定路径)和 visual studio 选项中的全局路径更改传递给编译器的路径。

路径中的 2 个点将您向上移动一个目录,一个点表示当前目录。任何其他数量的点都是无效的。因此,您的示例路径 .././foo/whatever/blah.h 本质上意味着“向上移动一个级别,查看文件夹 foo,然后查看文件夹 whatever”。在这种情况下,单点实际上没有做任何事情。

此导航基于文件结构,而不是解决方案资源管理器中的结构

关于c++ - Visual Studio 的编译器在哪里搜索#includes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521243/

相关文章:

c++ - 成员访问运算符的 lhs 求值与其参数的副作用之间是否存在先序关系?

c++ - 变量初始化和构造函数

C# 运行时编译错误 : Type 'Double' and 'Math' could not be found/does not exist in current context

c++ - 值初始化和非 POD 类型

c++ - OpenCV错误使用逆

C++将结构复制到另一个程序的资源

c++ - stoi - 设计问题

c++ - Boost 库和 Visual Studio (C++) 有问题

c# - Visual Studio 中的本地化文件路径

mysql - CFile + WriteHuge 不工作