5

我是 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 块中的两个大括号。我把这些承包了。

#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 中配置,你能给我一些见解吗?

谢谢

4

2 回答 2

2

聚会有点晚了,但如果有人仍在为此苦苦挣扎,请将以下行添加到您的 emacs 初始化文件中:

(setq semantic-c-obey-conditional-section-parsing-flag nil)
于 2015-05-25T19:09:56.317 回答
0

这似乎是设置semantic-lex-c-preprocessor-symbol-file 可以解决的问题。根据我所读到的关于 CEDET 的内容,它不仅会随意扩展每个宏,而且只会扩展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")

希望这可以帮助。

于 2013-07-21T14:49:21.430 回答