2012-01-04 4 views
0

Я сконфигурировал свой cedet почти таким же образом с http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html.Cedet не может правильно разобрать time.h под/usr/include

Спасибо 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 правильно, но смысловое находит STRUCT тм в wchar.h, а не в time.h. Проблема заключается в том, что в wchar.h есть декларация о просрочке для struct tm.

+0

Это звучит как ошибка, о которой следует сообщать командам Emacs или CEDET, а не вопрос. –

+0

не уверен, есть ли у другой одна и та же проблема или какие-то конфигурации не установлены – cutemiex

ответ

1

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

+0

Спасибо, Эрик. Но даже я добавил два символа и восстановил smeanticdb, он не смог найти нужное место. Я также обнаружил, что символ __BEGIN_NAMESPACE_STD, по-видимому, не влияет на парсер, поскольку он появляется почти перед каждым объявлением. – cutemiex