Eclipse有两个C/C++索引器(快速和完整):有什么区别?

Rab*_*ski 13 c c++ eclipse indexer eclipse-cdt

Eclipse CDT为C/C++代码提供了两个索引器(Preferences> C/C++> Indexer).有谁知道这两者之间的确切区别是什么?

帮助文件并不完全具有启发性:

"CDT支持其他索引器的贡献,2个索引器提供默认CDT版本:

  • 快速C/C++索引器:提供最快的索引功能 - 声明和交叉引用信息.这是推荐的索引器.

  • 完整的C/C++索引器:以性能为代价提供更加准确的索引功能 - 包括声明和交叉引用信息."

准确的意思是什么:它是否会索引更多的东西,如果是这样的话?

dag*_*rym 14

以下是CDT页面的摘录,描述了它们的解析和索引(CDT /设计/解析概述).它很好地描述了差异是什么以及快速索引器可能失败的位置:

解析和绑定解析是一个缓慢的过程,这是一个问题,因为用户希望代码编辑功能(如内容辅助)很快.因此,CDT将绑定信息存储在称为"索引"或"PDOM"(持久文档对象模型)的磁盘缓存中,以便能够提供对用户请求快速响应的功能.

构建索引涉及解析项目中的所有代码,解析所有绑定并将这些绑定写入索引.每次用户编辑文件时,都会逐步更新索引.

较早版本的CDT支持三种不同的索引模式,快速索引,完整索引和无索引.默认设置是快速索引器,因为索引大型项目可能是一个耗时的过程.快速索引器和完整索引器之间的区别在于快速索引器将跳过已经解析过一次的头文件,而完整索引器将始终在每次包含头文件时重新解析头文件.然而,重要的是要理解完整的索引器,尽管它的名字,仍然不完全准确.

当头文件包含在源文件中时,它受到在该点定义的任何宏的约束.某些库头使用宏与预处理器条件(#ifdefs)一起部分包含头文件.有时这样的头文件在项目中被包含多次,如果每次包含头时头的依赖的宏是不同的,则头的不同部分可以包括在不同的源文件中.在这种情况下,索引器都不准确,因为它只会在第一次遇到标头时对其进行索引.

完整索引器将重新解析它已经遇到的标头,但它不会重新索引它们.因此,可以更准确地解析包含标头的源文件,但标题本身将仅被索引一次.完整的索引器比快速索引器慢得多,因为它有额外的解析,但它只是稍微准确一点.因此,建议不要使用完整索引器,并且已从当前版本的CDT中删除.

每个项目都有一个与之关联的PDOM.PDOM作为平面二进制文件存储在磁盘上.索引器将仅索引源文件包含的标头,因此如果项目中的.h文件未被任何.c或.cpp文件包含,则通常不会对其进行索引.但是,有一个首选项设置用于索引项目中的所有文件.

  • 我写了那个Wiki页面条目,并在这里重新阅读它我已经意识到这是错误的.Full索引器实际上并不完全准确,已从当前版本的CDT中删除.我已经更新了wiki并且这个答案是正确的(我已经与其他CDT开发人员进行了双重检查,以确保其正确). (6认同)