我是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中配置,你能给我一些见解吗?
感谢
答案 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")
希望这有帮助。