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

dim*_*mba 9 c c++ eclipse ide eclipse-cdt

在搜索宏引用时,Eclipse显示文件+行,宏引用它.我想文件+行+ 功能.

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

有任何想法吗?

Jon*_*ham 8

更新 - 2017年1月

CDT的下一个版本(CDT 9.3,将于2017年6月发布的Eclipse Oxygen的一部分)将支持显示包含宏引用的函数.有关详细信息,请参阅错误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;
}
Run Code Online (Sandbox Code Playgroud)

使用以下使用C/C++索引的方法之一进行搜索(而不是文件/ grep样式搜索):

建立

  • 使用以下方法之一在工作区引用选择:
    • Shift+ Ctrl+G
    • 右键单击 - > 引用 - > 工作区
  • 搜索菜单 - > C/C++搜索并搜索参考资料,如下图所示: 在此输入图像描述

结果 - 功能搜索

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

功能搜索

结果 - 宏搜索

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

宏搜索

在引擎盖下

C/C++搜索结果中的每个搜索结果都是 LineSearchElement.Match.如果fEnclosingElementnull,则无法显示任何功能.

退后一步,您可以看到匹配是通过匹配创建IIndexName.该Match.fEnclosingElement字段由结果填充IIndexName.getEnclosingDefinition().

在宏参考的情况下,具体类型的IIndexNamePDOMMacroReferenceName,和实施getEnclosingDefinition是简单地return null.