2011-08-28 2 views
5

저는 emacs cedet 사용자입니다. 나는 큰의 도움을 cedet에서 얻었다.#ifdef에서 cedet 구문 분석 문제가 발생했습니다.

하지만 cedet에서 #ifdef 처리 오류를 발견했습니다. 내부 또는 내부 구성이 잘못된 것일 수 있습니다. 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 파서 문제 때문입니까?

내가 설정해야 할 부분이 있다면, 통찰력을 좀 주시겠습니까?

감사

+2

버그 리포트를 제출 고려하시기 바랍니다 :'MX 보고서 - 이맥스 -bug'. Emacs 개발자는 문제가 있는지 여부를 결정합니다. – Drew

+0

cedet-devel 메일 링리스트에 문제를보고하십시오. –

답변

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

희망이 있습니다.

1
파티에 늦게 비트,하지만 사람은 여전히 ​​고민되는 경우에, 당신의 이맥스에 초기화하기 파일을 다음 줄을에 추가

:

(setq semantic-c-obey-conditional-section-parsing-flag nil) 
관련 문제