Eclipse CDT 的 parser/indexer 是否有 "self-identifying" 预处理器 #define 宏?

Does Eclipse CDT's parser/indexer have a "self-identifying" preprocessor #define macro?

我希望仅在 Eclipse 解析我的源代码树时包含一些代码。目前,我正在做的^H^H^H^H^H 尝试做的是添加自定义预处理器宏 - 使用 Eclipse 的 Help |偏好 | C/C++ |构建 |设置 Discovery - 并在其中的各种命令行中插入 -DECLIPSE_BUILTIN

所以我想知道是否已经有一个标准的、默认的、预处理器(和索引器?)定义为 'identify' 自己的宏,就像这样对代码 - 省去了我的麻烦。

是的,存在这样的宏。这是 __CDT_PARSER__.

Source

编辑 以阐明何时在显示错误和警告指示器的上下文中使用它:

CDT 从两个来源获取错误和警告指示器:

  1. 它可以解析构建的输出,识别该输出中的错误和警告,并在编辑器中显示它们。

    这些错误和警告指示符具有注释类型ErrorsWarnings(您可以在Preferences | General | Editors | Text Editors | Annotations中看到不同的注释类型,包括每种类型的图标)。

    为此目的解析其输出的构建与生成目标文件的构建相同(并且这些指示器仅在您调用构建时更新,例如通过 Project | Build Project)。因此,__CDT_PARSER__ 用于此构建。

  2. 它可以使用自己的解析器分析您的代码,并指出它发现的错误和警告。这与您的编译器无关,并且会在您键入时发生。

    这会产生注释类型为 Codan ErrorsCodan Warnings 的错误和警告指示器("codan",code [=46 的缩写=]an分析,是产生这些的成分)。还有 C/C++ Indexer Markers 用于语法错误,这些错误是在解析过程中产生的。

    自然地,确实使用__CDT_PARSER__

    请注意,CDT 的代码分析不会捕获您的编译器所做的所有错误(或警告)。它也有可能产生误报错误或警告,这通常是由于索引器配置与构建配置不匹配而发生的,但有时也会由于 CDT 本身的错误或缺陷而发生。

EDIT 为了进一步说明,索引器使用与 codan 相同的解析器(定义了 __CDT_PARSER__ 和所有)来构建索引。 (事实上​​,索引器和解析器并不是真正可分离的,因为解析器依赖于索引来解析在解析过程中包含的头文件中定义的名称。)