Jump to content

    

Парсер C/C++ в эклипсе

Здравствуйте.

 

Занимаюсь реанимацией древнего проекта.

Разрабатывалось оно в CodeWarrior, но в 2017 году тамошним редактором я пользоваться не могу совсем.

Перетащил все файлики в эклипс (компилятор оставил старый). Подсветка-рефакторинг-поиск - всё прекрасно, но...

 

Но как научить эклипс корректно обрабатывать конструкции вида

{asm{nop};}

или

uchar DEVID_ @ (DevInfoAddr+4) = 123;

?

При виде первой он подчёркивает всё, что дальше, красным.

Во втором просто не видит переменной.

Share this post


Link to post
Share on other sites

где-нибудь объявить

 

#if REAL_BUILD
#define ECLIPSE(...) __VA_ARGS__
#else
#define ECLIPSE(...)
#endif

и затем

ECLIPSE({asm{nop}});

uchar DEVID_ ECLIPSE(@ (DevInfoAddr+4)) = 123;

 

REAL_BUILD надо указать в дефайнах при билде (в проекте codewarior или как вы строите), но не указывать в дефайнах в эклипсе

 

Ну или взять исходники cdt и подхачить их :)

Share this post


Link to post
Share on other sites

я делал иначе - создавал отдельный .h - файл, подключаемый к файлам проекта, где неизвестные для эклипса конструкции задавал через #define.

Сам .h-файл оборачивался в #if для различных компиляторов вида:

#define __ECLIPSE__

#if defined (__SDCC__)

#elif defined (__ARMCC__)

#elif defined (__GNUC__)

#elif defined (__ECLIPSE__)

#endif

Такой подход позволит и работать с кодом в эклипсе, и запускать компиляцию разными компиляторами без коррекции каждый раз макроса, т.к. вызываемые компиляторы добавляют свои встроенные определения, автоматом подхватится нужный кусок из h-файла. Баловался таким именно когда использовал одни и те же файлы для абсолютно разных компиляторов.

Сейчас не помню, вроде как для парсинга эклипс использует по-умолчанию GNUC компилятор и его определения.. Ну если что - #elif defined (__ECLIPSE__) покатит.

 

Второй путь - добавить такие макроопределения на уровне свойств проекта (Paths and Symbols) - тогда в коде проекта не придётся ничего добавлять/изменять.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this