我是emacs cedet的用户。我从cedet得到了很大的帮助。
但是,我在处理cedet中的#ifdef处理时发现了一些错误。不确定是cedet internal还是我的配置错误。我引用了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-method)或其他cedet语义函数(跳到定义)遇到错误。
我可以很容易地猜到这可能来自#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中配置一些点,你能给我一些见解吗?
谢谢
发布于 2015-05-26 03:09:56
有点晚了,但如果有人还在为此而苦苦挣扎,请将以下行添加到emacs init文件中:
(setq semantic-c-obey-conditional-section-parsing-flag nil)发布于 2013-07-21 22:49:21
这似乎是设置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")希望这能有所帮助。
https://stackoverflow.com/questions/7218671
复制相似问题