Eclipse CDT содержит собственный препроцессор / анализатор для анализа вашего кода и построения индекса. Однако, когда вы вызываете сборку CDT, она вызывает ваш системный компилятор, как, например, gcc. Могут быть небольшие различия между синтаксисом, принятым синтаксическим анализатором CDT, и синтаксисом, принятым вашим компилятором. Когда это происходит, парсер CDT может запутаться.
В моей системе макрос offsetof
расширяется до выражения, использующего ключевое слово __offsetof__
. Это ключевое слово не распознается CDT, поэтому есть синтаксическая ошибка. Для решения этой проблемы в синтаксический анализатор CDT встроен макрос для работы с __offsetof__
, который выглядит следующим образом:
#define __offsetof__(x) (x)
Это кажется неправильным, по крайней мере, в моей системе результатом является удаление ключевого слова __offsetof__
из источника, что все еще приводит к синтаксической ошибке.
Мне удалось избавиться от синтаксической ошибки, перейдя на страницу свойств Paths and Symbols и добавив макрос для __offsetof__
, который отображается в 'foo'. Это заставляет анализатор думать, что это просто вызов функции, которую он не видел раньше, но не синтаксическая ошибка.
В качестве альтернативы вы можете отключить отчеты о синтаксических ошибках в редакторе, перейдя в «Окно»> «Установки»> «Основные»> «Редакторы»> «Текстовые редакторы»> «Аннотации» и сняв все флажки для маркеров индексатора C / C ++.