为什么Eclipse要索引一个不在路径中的头文件?

我使用来自ARM DS-5 v5.20.0包的EclipseCDTv4.3.2进行Makefile项目的代码开发和调试。

makefile实际上是一个基于命令行选项在多个配置中创建多个目标的makefile层次结构。

为了允许进行有效的静态分析,我使用项目的设置Paths and Symbols来帮助Indexer查找各种包含文件,并突出显示正确的有条件编译的代码段。

我们的项目包含一个头文件,它包含在代码树的许多模块中。但是,头文件的两个变体存在于两个相邻的目录中,以便在两个构建配置中有条件地使用:

代码语言:javascript运行复制My_Project

|

+-- Include_1

| |

| +-- header.h

|

+-- Include_2

| |

| +-- header.h

|

+-- Source

| |

| +-- module_1.c

|

+-- makefile这两种变体大多相似,但有一些不同之处。这些标头包含一些宏定义和一个enum擦除的typedef。具体来说,在这两个变体中,以下示例部分是相同的:

代码语言:javascript运行复制// header.h

#define SYMBOL 0x1

typedef enum {

constant = 0x2

} enum_t一个典型的代码模块根据makefile中的配置包括其中一个头,并包含对SYMBOL和constant的引用。

在paths and Symbols选项卡中,我只向路径列表添加了My_Project/Include_1,因此索引器不应该被混淆。我还在Window->Preferences->C/C++->Indexer菜单中禁用了Allow heuristic resolution of includes选项(实际上,我禁用了所有索引器选项)。

在所有这些之后,当我在编辑器中打开module.c文件时,对constant的引用将被标记为波浪红色下划线,并指示Symbol 'constant' could not be resolved错误。同时,对SYMBOL的引用没有错误指示。

当我将其中一个头文件重命名为header_x.h时,错误指示就消失了。

1.为什么我会得到这些索引错误指示?

2.如何消除它们?

3.为什么只有枚举而不是#define s?