#ifdef上的cedet解析问题

时间:2011-08-28 02:29:46

标签: emacs cedet

我是emacs cedet用户。我得到了cedet的大力帮助。

但是,我发现在cedet中处理#ifdef处理时出现了一些错误。 不确定它是来自cedet内部还是我的错误配置。 我引用Curl中的一些代码来解决这个问题。

#ifdef CURL_DO_LINEEND_CONV
  if((data->set.crlf) || (data->set.prefer_ascii)) {
#else
  if(data->set.crlf) {
#endif /* CURL_DO_LINEEND_CONV */
    endofline_native  = "\n";

使用此代码,必须有一些错误括号匹配。因为我使用(eassist-list-methods)或其他cedet-semantic函数(跳转到定义)时出错。

我很容易猜到这可能来自#ifdef .. #endif block中的两个大括号。 我将这些归结为这样。

#ifdef CURL_DO_LINEEND_CONV
  if((data->set.crlf) || (data->set.prefer_ascii)) 
#else
  if(data->set.crlf) 
#endif /* CURL_DO_LINEEND_CONV */
{
    endofline_native  = "\n";

之后,cedet语义功能运行良好。

对此有何看法?它是否来自cedet解析器问题?

如果有一点我必须在cedet中配置,你能给我一些见解吗?

感谢

2 个答案:

答案 0 :(得分:2)

派对有点晚了,但是如果有人还在努力解决这个问题,请将以下行添加到您的emacs init文件中:

(setq semantic-c-obey-conditional-section-parsing-flag nil)

答案 1 :(得分:0)

这似乎是设置semantic-lex-c-preprocessor-symbol-file的问题 可以解决。 根据我所读到的关于CEDET的内容,它不仅仅是扩展每个宏 willy nilly,但只有semantic-lex-c-preprocessor-symbol-file中定义的那些。 因此,您应该添加文件,其中CURL_DO_LINEEND_CONV已定义到此列表中。 这是一个例子:

(add-to-list 'semantic-lex-c-preprocessor-symbol-file
             "~/Software/deal.II/include/deal.II/base/config.h")

希望这有帮助。