我应该使用#include <file.h>还是“file.h”?

时间:2017-09-18 15:02:59

标签: c include

有两种方法可以在C中包含文件:

#include <headerpath/header.h>

#include "headerpath/header.h"

第一个将使用编译器已知的目录查找文件,因此我们可以包含标准文件而无需知道它们的位置。 第二种方法是仅使用引号之间的路径来查找文件。 (如果搜索失败,编译器会尝试第一种方式)。

我们可以将一个或多个目录添加到编译器知道的目录列表中(第一种方式)。例如,对于gcc,我们有-I选项。

所以最后,这两个代码是等价的(path_to_header是一个目录):

1)

#include "path_to_header/header.h"

int     main(void)
{
    return (0);
} // Compiling with : gcc main.c

2)

#include <header.h>

int     main(void)
{
    return (0);
} // Compiling with : gcc main.c -I path_to_header

所以我的问题是: 以我自己的头文件为例,我应该使用1)还是2)?为什么?也许这只是个人选择?有不同的情况需要知道吗?

感谢您的阅读:)

编辑: 我不是在寻找两种方式之间的区别(我想我理解它们,正如我所解释的那样,感谢this post),我想知道是否有一些特殊的情况需要了解,也许是为了小组工作或使用不同的编译器进行相同的程序...也许我不知道如何表达我的想法(或者这是一个没有真正答案的愚蠢问题),我必须尝试知道:)。

3 个答案:

答案 0 :(得分:2)

对于标准库的标头(可能是预编译的),请使用:

#include <stdio.h>

对于项目的标题使用:

#include "project/header.h"

在命令行上使用-I选项以获取其他库。

答案 1 :(得分:1)

根据C standard,它们之间唯一的标准区别在于#include <...>包含标题,而#include "..."包含< em>源文件(如果没有找到源文件,则回退到<...>行为)。所有其他差异都是实现定义的。

区别很重要,例如,像stdlib.h这样的标准头文件实际上可能不是文件,而是在编译时由编译器注入。

对于您自己的代码,因为您不会有这样的标头魔法,并且应该确切地知道您希望从您自己的工作中包含哪些源文件以及您希望编译器处理哪些(系统库等),您应该只使用<...>表示不属于项目文件结构的包含。

答案 2 :(得分:-1)

如果您自己的头文件位于已定义的路径中,例如与您的文件使用标题的文件夹相同,则必须使用这种方式“header.h”。 你必须使用&lt; header.h&gt;当标题是一个系统标题时,不包含您所在的系统标题。