首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#ifdef上的cedet解析问题

#ifdef上的cedet解析问题
EN

Stack Overflow用户
提问于 2011-08-28 10:29:46
回答 2查看 404关注 0票数 5

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

但是,我在处理cedet中的#ifdef处理时发现了一些错误。不确定是cedet internal还是我的配置错误。我引用了Curl中发生此问题的一些代码。

代码语言:javascript
复制
#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-method)或其他cedet语义函数(跳到定义)遇到错误。

我可以很容易地猜到这可能来自#ifdef中的两个大括号。#endif块。我把这些包起来就像这样。

代码语言:javascript
复制
#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中配置一些点,你能给我一些见解吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-05-26 03:09:56

有点晚了,但如果有人还在为此而苦苦挣扎,请将以下行添加到emacs init文件中:

代码语言:javascript
复制
(setq semantic-c-obey-conditional-section-parsing-flag nil)
票数 2
EN

Stack Overflow用户

发布于 2013-07-21 22:49:21

这似乎是设置semantic-lex-c-preprocessor-symbol-file就可以解决的问题。根据我所读到的关于CEDET的内容,它并不只是随意地扩展每个宏,而只是扩展那些在semantic-lex-c-preprocessor-symbol-file中定义的宏。因此,您应该将定义了CURL_DO_LINEEND_CONV的文件添加到此列表中。下面是一个例子:

代码语言:javascript
复制
(add-to-list 'semantic-lex-c-preprocessor-symbol-file
             "~/Software/deal.II/include/deal.II/base/config.h")

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7218671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档