Индексирование всех блоков #ifdef и #else с помощью CDT

Я хотел бы проиндексировать каждый блок #ifdef и #else в моих исходных файлах C/C++ с помощью моего индексатора CDT 8.0.2 в Eclipse indigo в Ubuntu.

Добавление символов не сработает, поскольку оно не покрывает блоки #else.

Есть ли способ заставить Eclipse CDT просто игнорировать блоки #ifdef и #else? как и другие индексаторы (например, emacs cscope)

Я искал несколько дней и не нашел хорошего решения.

У меня действительно большой объем кода, и лучше не редактировать его, чтобы удалить #ifdefs, даже временно.


person John Snow    schedule 12.07.2012    source источник
comment
Возможный дубликат Как я могу заставить Eclipse индексировать код внутри #ifdef .... #endif   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 02.04.2017


Ответы (1)


Краткий ответ: нет. Препроцессор CDT так не работает. Он следует правильной семантике, то есть анализирует только одну ветвь #ifdef. Emacs может заходить в каждую ветку, но он не выполняет такой правильный и полный анализ, как CDT.

Единственный вариант — настроить несколько конфигураций сборки, настроенных для разбора каждой ветки. Затем вы можете переключать конфигурации сборки, когда хотите работать в разных ветках. Однако это далеко не идеально, потому что настройка может занять много времени, и каждый раз при переключении будет запускаться переиндексация. (Также вам нужно настроить его для повторного индексирования, перейдите в «Окно»> «Настройки»> «C/C++»> «Индексатор» и выберите «Использовать активную конфигурацию сборки»)

Обратите внимание, что синтаксический анализатор CDT будет анализировать неактивные ветки #else только для того, чтобы найти объявления для отображения в представлении схемы.

person Mike Kucera    schedule 29.08.2012