我怎样才能让Eclipse在#ifdef .... #endif中编入索引代码

时间:2010-06-25 22:48:49

标签: c eclipse indexing

我正在使用eclipse处理一些c代码,并且它没有像这样编译条件编译块中的代码:

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

如何让eclipse索引feature_a函数?

6 个答案:

答案 0 :(得分:32)

你可以告诉eclipse定义了USE_FEATURE_A。打开项目属性并转到“C / C ++ General->路径和符号”页面,在“符号”选项卡下单击“添加”按钮,将USE_FEATURE_A放在名称feild中,然后单击“确定”。 / p>

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

答案 1 :(得分:1)

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

Handling Conditional Compilation in CDT's Core

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:0)

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