所有#include-ed的“.h”头文件是否必须与.cpp文件位于同一文件夹中?

时间:2014-07-01 14:39:17

标签: c++ c header include header-files

我正在处理一个更大的项目,并且许多.cpp文件包含位于不同目录中的文件,但是没有引用访问代码中的其他目录。

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

没有

通常你给编译器(或更具体地说,预处理器)一堆包含目录,告诉它在哪里查找头文件。这通常是从Makefile(或在IDE中构建时从项目设置)完成的。

该选项的确切外观当然取决于每个编译器。使用gcc,it's the -I option

答案 1 :(得分:0)

就我而言,你可以将.h和.cpp文件放在不同的目录中。假设您有一个标题文件夹和一个.cpps文件夹。在你的cpp文件中你只需#include“headers / myheader.h”并且应该完美无缺。

答案 2 :(得分:0)

没有。除了提到的-I编译器选项之外,您还可以在#include指令的filename参数中使用(通常是相对的)path-spec。

答案 3 :(得分:0)

有关:

#include "header.h"

编译器(或更严格地说是预处理器)将首先查看包含源文件的文件夹,然后查看以某些编译器相关形式指定的文件列表 - 通常是命令行选项和/或环境变量。 / p>

有关:

#include <header.h> 

不搜索包含源文件夹,只搜索指定给编译器的路径列表。

GCC实际上有三个搜索组:

  • 当前源文件路径
  • 引用包含目录
  • 系统包含目录

引用标题按顺序搜索所有三个,而<header.h>类型包含只搜索最后一个。并非所有的编译器都是关于什么构成“系统包含”的具体内容,并且最后两个没有区分并且以相同的方式指定。

您的编译器应记录实际行为,例如,请参阅here