例如,如果我有一个名为foo.h的文件,我是否可以通过执行以下操作来包含它:
#include "foo.h"
或者我有时必须做以下事情:
#include "bar/foobar/foo.h"
编辑 - 它们是否只是通过限制搜索文件来缩短编译时间?
答案 0 :(得分:2)
基本上,您可以将包含路径作为选项传递给C ++编译器,但它不会递归查找文件。如果您传递路径/opt/include
并执行“#include "foo.h"
,它将_只查找/opt/include/foo.h
,而不是/opt/include/dummy/foo.h
。
换句话说,要么在命令行上传递每个可能的包含路径,要么传入根目录并使用#include "dummy/foo.h"
编辑:@MatthieuM。在下面提出了另一个好处,#include "mylibrary/api.h"
使您使用的文件更加清晰,而不仅仅是#include "api.h"
,尤其是如果您使用的是多个库。
答案 1 :(得分:1)
编译器不会递归搜索您的源目录。如果您想使用#include "foo.h"
,则需要使用-Ibar/foobar
进行编译,告诉编译器它应该在bar/foobar
中查找头文件。
否则,您将必须使用完整(相对)路径。我倾向于优先于-I
,因为它使源更加独立于编译器标志(在构建系统之间进行更改时,您会很感激)。
答案 2 :(得分:0)
可能存在多个具有相同名称的头文件的情况 - 在这种情况下,路径有助于消除歧义。
答案 3 :(得分:0)
我认为这取决于您的项目设置,例如您在Visual C ++中有“Additional Include Directories”这样的部分,因此IDE也会搜索这些目录中的文件。
答案 4 :(得分:0)
第一个语句#include“foo.h”将在当前工作目录或其他include目录下提到的目录中搜索foo.h。
如果您的头文件位于其他路径中,则需要明确提及它。