Eclipse CDT: 不显示宏出现的名称

Eclipse CDT: doesn't show name a macro appears in

搜索宏引用时,Eclipse 会显示宏引用的文件+行。我要file+line+function.

搜索其他类型的数据(例如函数)将按预期显示文件+行+函数,所以也许应该在 Eclipse 配置中为宏调整一些东西?

有什么想法吗?

更新 - 2017 年 1 月

CDT的下一个版本(CDT9.3,Eclipse Oxygen 的一部分将于 2017 年 6 月发布)将支持显示包含宏引用的函数。有关详细信息,请参阅 Bug 508216

此答案的其余部分是原始答案。

TL;DR

在 Eclipse CDT 中无法显示引用宏的函数,因为在构建索引时此类信息未包含在索引中。

图片

为确保我们谈论的是同一件事,我提供了一些视觉效果。

给定一个包含函数、宏和全局变量的简化 C 文件:

示例代码

#define MACRO(X) ((X) + 2)
int function(int);
int global;

int function_results_are_in(void) {
    int i = 0;
    i = MACRO(i);
    i = function(i);
    i += global;
    return i;
}

使用以下使用 C/C++ 索引的方法之一进行搜索(与 file/grep 样式搜索相反):

设置

  • 工作区中的引用 选择使用以下之一:
    • Shift+Ctrl+G
    • Right-click -> 引用 -> 工作区
  • Search menu -> C/C++ Search 并搜索参考资料,如下图:

结果 - 函数搜索

正如您在搜索函数时看到的那样,结果显示包含的函数名称:

结果-宏搜索

但是对于宏搜索,没有包含函数名:

引擎盖下

C/C++搜索结果中的每个搜索结果是LineSearchElement.Match. If its fEnclosingElementnull则没有功能显示。

退一步看match is created from a matching IIndexNameMatch.fEnclosingElement 字段由 IIndexName.getEnclosingDefinition().

的结果填充

在宏引用的情况下,IIndexName 的具体类型是 getEnclosingDefinitionPDOMMacroReferenceName, and the implementation 只是 return null