Cedet не может правильно проанализировать time.h в /usr/include

Я настроил свой cedet почти так же, как http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html.

Спасибо alexott, в большинстве случаев он работает хорошо, но я обнаружил, что он не может правильно разобрать структуру tm в /usr/include/time.h.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void){
    struct tm times;
    FILE file;
}

При использовании M-x semantic-ia-fast-jump структура FILE верна, но семантика находит структуру tm в wchar.h, а не в time.h. Кажется, проблема в том, что в wchar.h для struct tm есть предварительное объявление.


person cutemiex    schedule 04.01.2012    source источник
comment
Это похоже на ошибку, о которой следует сообщить командам Emacs или CEDET, а не на вопрос.   -  person Benjamin Pollack    schedule 04.01.2012
comment
не уверен, что у другого такая же проблема, или просто нужны некоторые конфигурации   -  person cutemiex    schedule 04.01.2012


Ответы (1)


В моей копии time.h кажется, что символ __BEGIN_NAMESPACE_STD появляется перед объявлением структуры и сбивает с толку синтаксический анализатор. Вы можете быстро исправить это, просто добавив это и __END_NAMESPACE_STD к переменной semantic-lex-c-preprocessor-symbol-map как сопоставление с пустым. Затем удалите файлы кеша semanticdb (в ~/.semanticdb), связанные с time.h, или просто все в /usr/include, и перезапустите emacs. time.h должен быть повторно проанализирован, и после этого все должно работать нормально для time.h... если только вы не хотите использовать std::tm или что-то в этом роде.

person Eric    schedule 18.01.2012
comment
Спасибо, Эрик. Но даже я добавил два символа и восстановил smeanticdb, он не смог найти нужное место. Я также обнаружил, что символ __BEGIN_NAMESPACE_STD, по-видимому, не влияет на синтаксический анализатор, поскольку он появляется почти перед каждым объявлением. - person cutemiex; 20.02.2012