gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:21:15 25 4
gpt4 key购买 nike

我正在使用 ARM DS-5 v5.20.0 包中的 Eclipse CDT v4.3.2 进行代码开发和调试 Makefile 项目。

makefile 实际上是 mkefile 的层次结构,它根据命令行选项在多个配置中创建多个目标。

为了进行有效的静态分析,我使用项目的设置路径和符号来帮助索引器找到各种包含文件并突出显示正确的条件编译代码段。

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

My_Project
|
+-- Include_1
| |
| +-- header.h
|
+-- Include_2
| |
| +-- header.h
|
+-- Source
| |
| +-- module_1.c
|
+-- makefile

这两个变体大部分相似,但也有一些差异。这些 header 包含一些宏定义和一个 enumerated typedef。具体来说,以下示例部件在两种变体中是相同的:

// header.h
#define SYMBOL 0x1
typedef enum {
constant = 0x2
} enum_t

典型的代码模块包括这些 header 之一,具体取决于 makefile 中的配置,并包含对 SYMBOLconstant 的引用。

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

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

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

<强>1。为什么我会收到这些索引器错误指示?

<强>2。我怎样才能消除它们?

<强>3。为什么只有枚举而不是#define-s?

最佳答案

根据我的经验,Eclipse CDT 索引器将索引项目目录中的源文件,无论您喜欢与否。只有一种方法可以避免您的情况:将他们排除在项目之外,据我所知,这可以通过两种方式完成:

  1. 选择资源,通过右键单击属性将其标记为派生,并在资源中检查派生,然后重建索引
  2. 编写排除资源的独占过滤器。

您需要检查的另一件事是您没有在 PATH 或索引器可能考虑的其他环境变量中意外添加有问题的目录。

除了 CDT 出了什么问题之外,您似乎正在做一些不是最佳实践的事情。您应该将您的枚举放在一个单独的带有头文件保护的头文件中,并根据需要包含它。

然而,这是一种可能发生的情况,您可能无法采取不同的行动。

关于c - 为什么 Eclipse CDT 索引一个不在路径中的头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33638092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com