#include指令:相对于哪里?

rlb*_*ond 41 c++ include c-preprocessor

我查看了C++编程语言,试图找到答案.当我#include "my_dir/my_header.hpp"在标题中,它在哪里寻找这个文件?是相对于包含它的源文件或其他内容的标题?

Ign*_*ams 9

它与当前源文件和给定的任何搜索路径相关(-I表示gcc).


Pet*_*McG 7

这取决于您在#include指令中使用的语法:

#include "path-spec"
#include <path-spec>
Run Code Online (Sandbox Code Playgroud)

引用形式:此表单指示预处理器在包含#include语句的文件的同一目录中查找包含文件,然后在包含(#include)该文件的任何文件的目录中查找.然后,预处理器沿/ I编译器选项指定的路径搜索,然后沿INCLUDE环境变量指定的路径搜索.

Angle-bracket形式:此表单指示预处理器首先沿/ I编译器选项指定的路径搜索包含文件,然后在从命令行编译时,沿INCLUDE环境变量指定的路径搜索.

path-spec是一个文件名,可选地在目录规范之后.文件名必须命名现有文件.path-spec的语法取决于编译程序的操作系统.

此信息应位于特定C++预处理器参考的文档中,以上内容摘自MSDN上有关此主题的更多内容.

  • 您应该说明这是哪个实现(编译器)。 (2认同)
  • @aib:谢谢 - 信息来自引用的MSDN链接,特定于Microsoft的Visual Studio 2005预处理器.(非常相似)Visual Studio 2008版本可以在http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx找到 (2认同)