我是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";
Run Code Online (Sandbox Code Playgroud)
使用此代码,必须存在一些错误括号匹配.因为我使用(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";
Run Code Online (Sandbox Code Playgroud)
在此之后,cedet语义功能运行良好.
对此有何想法?它是否来自cedet解析器问题?
如果有一点我必须在cedet配置,你能给我一些见解吗?
谢谢
这似乎是一个设置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")
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。