如何让Eclipse在#ifdef … #endif中编写索引代码

我正在使用eclipse来处理一些c代码,它不是像这样在条件编译块中索引代码:

#ifdef USE_FEATURE_A int feature_a(...) { some = code(here); } #endif 

如何让eclipse索引feature_a函数?

你可以告诉eclipse定义了USE_FEATURE_A 。 打开项目属性并转到“C / C ++ General-> Paths and Symbols”页面,在“Symbols”选项卡下单击“Add”按钮,将USE_FEATURE_A放在名称feild中,然后单击OK。

注意:这将导致它不会将任何#else方面的索引编入您的预处理器内容…所以除非它们都像有问题的那样你不能AFAIK,但如果它们是你那么你就是好的。 (Eclipse包含一个用于分析代码的C预处理器,上面的所有内容基本上与向命令行添加-DUSE_FEATURE_A相同,因此Eclipse的预处理器的行为与编译器中的预处理器不同)

对于选择作为解决方案的解决方案,这是一个更容易的,在我看来更优雅的解决方案:

如果有人遇到同样的问题(就像我一样),可以通过转到Window-> Preference-> C / C ++ / Indexer启用“索引所有标题变体”来轻松解决这个问题。 然后单击Project-> C / C ++ Indexer-> rebuild清理构建项目。 这应解决源自预处理器命令的所有错误。

对于它的价值,让eclipse解析有条件编译的代码要比初看起来要难得多。 IBM从2007年发现了一篇论文,他们说他们将优先考虑“下一个版本”。

处理CDT核心中的条件编译

我有同样的问题,但通过预处理有条件地消除的代码是完全有效的c代码,我希望它格式化…这是我的解决方案:

1)全局查找/替换#if到#JUNKif

2)Ctrl-Shift-F重新格式化源

3)另一个全局查找/替换#JUNKif到#if

在Eclipse(Kepler)c / c ++编辑器中将标记下的代码编入索引的一种方法。

您可以在Eclipse编辑器中启用编译标志,以便可以为其下的代码编制索引。

属性>预处理器包含路径> CDT用户设置条目

单击ADD并添加预处理器宏,您可以指定其值。

我想最好的方法是使用Indexer选项:Project Properties> C / C ++ General> Indexer。 您可以选择启用项目特定设置我更喜欢选择“使用活动的构建配置”,以便为项目中实际构建的所有文件编制索引。 无论如何,你也可以选择索引项目中的所有文件,即使它们不包含在构建中……