Проблема разбора cedet на #ifdef - PullRequest
5 голосов
/ 28 августа 2011

Я пользователь emacs 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-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, не могли бы вы дать мне некоторое представление?

спасибо

Ответы [ 2 ]

2 голосов
/ 25 мая 2015

Немного опоздал на вечеринку, но если кто-то все еще с этим борется, добавьте следующую строку в файл инициализации emacs:

(setq semantic-c-obey-conditional-section-parsing-flag nil)
0 голосов
/ 21 июля 2013

Это похоже на проблему, что установка 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")

Надеюсь, это поможет.

...