2011-08-28 64 views
5

我是emacs cedet用戶。我從cedet得到了很大的幫助。cedet解析問題#ifdef

但是,我發現在cedet中有一些錯誤prcessing #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中配置,您能否給我一些見解?

感謝

+2

請考慮提交錯誤報告:'的Mx報告,emacs的-bug'。 Emacs開發人員將確定是否存在問題。 – Drew

+0

請同時向cedet-devel郵件列表報告問題 –

回答

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") 

希望這有助於。

1

遲到了一點,但如果有些人還是用這種掙扎,下面一行添加到您的emacs初始化文件:

(setq semantic-c-obey-conditional-section-parsing-flag nil)