我正在使用IAR开展项目。
在项目中,有多个位置可以搜索包含文件。
有两个位置都具有相同的名称文件。
所以,在C文件中我们有#include "some_file.h"
编译器/预处理器如何处理这个?它包含它找到的第一个some_file.h
吗?
我的猜测......它按照在IAR项目定义中定义它们的顺序搜索目录。然后它在第一场比赛时停止。这是对的吗?
答案 0 :(得分:1)
通常在使用#include "foo.h"
时,首先相对于当前源文件搜索文件,而#include <foo.h>
则更喜欢标准路径。
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"
,将搜索以下路径:
您还可以通过查看gcc -E foo.c
的输出找出确切包含的文件。
请参阅here了解-I
和-iquote
的工作方式。
答案 1 :(得分:0)
据我所知,它确实按照定义的顺序进行搜索。
您可以通过在两个标题之一中更改或添加一些值来测试它,以查看其中包含哪个值,或者只是重命名一个。