C包括来自多个位置的文件

时间:2015-03-09 14:35:27

标签: c include

我正在使用IAR开展项目。 在项目中,有多个位置可以搜索包含文件。 有两个位置都具有相同的名称文件。 所以,在C文件中我们有#include "some_file.h" 编译器/预处理器如何处理这个?它包含它找到的第一个some_file.h吗?

我的猜测......它按照在IAR项目定义中定义它们的顺序搜索目录。然后它在第一场比赛时停止。这是对的吗?

2 个答案:

答案 0 :(得分:1)

通常在使用#include "foo.h"时,首先相对于当前源文件搜索文件,而#include <foo.h>则更喜欢标准路径。

请参阅GCC documentation

  

GCC首先在包含当前文件的目录中查找#include“file”请求的头,然后在-iquote选项指定的目录中查找,然后在相同的位置查找使用尖括号请求的头。例如,如果/usr/include/sys/stat.h包含#include“types.h”,GCC首先在/ usr / include / sys中查找types.h,然后在其通常的搜索路径中查找。

增加: 通常也会按照它们在命令行中出现的顺序搜索自定义路径。 因此,对于-I/opt/include -I$dependency/include#include "foo.h",将搜索以下路径:

  1. ./ foo.h(与包含文件相同的目录)
  2. /opt/include/foo.h(第一个自定义路径)
  3. $ dependency / include / foo.h(第二个自定义路径......)
  4. /usr/include/foo.h(标准搜索路径)
  5. 您还可以通过查看gcc -E foo.c的输出找出确切包含的文件。

    请参阅here了解-I-iquote的工作方式。

答案 1 :(得分:0)

据我所知,它确实按照定义的顺序进行搜索。

您可以通过在两个标题之一中更改或添加一些值来测试它,以查看其中包含哪个值,或者只是重命名一个。

相关问题