2016-12-29 12 views
2

Я хочу, чтобы какой-то код включался, когда Eclipse анализирует исходное дерево. На данный момент, что я делаю, H^H^H^H^H пытается сделать, это добавить пользовательский макрос препроцессора - с помощью Eclipse's Help | Настройки | C/C++ | Построить | Установите Discovery - и вставьте -DECLIPSE_BUILTIN в различные командные строки.У анализатора/индексатора Eclipse CDT есть «самоопределяющийся» препроцессор #define macro?

Так что мне было интересно, существует ли уже стандартный макрос по умолчанию, который препроцессор (и индексор?) Определяет «идентифицировать себя» таким образом, как этот код, чтобы избавить меня от этой проблемы.

ответ

3

Да, такой макрос существует. Это __CDT_PARSER__.

Source

EDIT уточнить, когда это используется в контексте с указанием ошибок и предупреждений показателей:

CDT получает ошибки и предупреждения показателей из двух источников:

  1. It может анализировать выходные данные вашей сборки, распознавать ошибки и предупреждения в этом выпуске и обрабатывать их в редакторе.

    Эти индикаторы ошибок и предупреждений имеют типы аннотаций Errors и Warnings (вы можете видеть различные типы аннотаций, включая значки для каждого типа, в Preferences | General | Editors | Text Editors | Annotations).

    Строка, результат которой разобран для этой цели, представляет собой ту же сборку, которая создает ваши объектные файлы (и эти индикаторы обновляются только при вызове сборки, например, через Project | Build Project). Таким образом, __CDT_PARSER__ является не используется для этой сборки.

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

    Это приводит к ошибке и предупреждающие индикаторы с типами аннотаций Codan Errors и Codan Warnings («CODAN», короткие для трески е alysis, являющийся компонентом, который производит их). Существует также C/C++ Indexer Markers для синтаксических ошибок, которые возникают во время самого анализа.

    Это, естественно, делает использование __CDT_PARSER__.

    Обратите внимание, что анализ кода CDT не охватывает все ошибки (или предупреждения), которые делает ваш компилятор. Существует также возможность создания ложных положительных ошибок или предупреждений, что часто происходит из-за конфигурации индексатора, которая не соответствует конфигурации сборки, но иногда также происходит из-за ошибок или недостатков самого CDT.

РЕДАКТИРОВАТЬ Для дальнейшего уточнения, индексатор использует тот же анализатор, как Codan (с __CDT_PARSER__ быть определен и все), чтобы построить индекс. (Фактически, индекс и синтаксический анализатор не являются действительно разделяемыми, поскольку анализатор полагается на индекс для разрешения имен, определенных во включенных заголовочных файлах во время разбора.)

+0

Я имею в виду, что некоторые вызовы компилятора могут использоваться для получения индикаторов ошибок и предупреждений для разных строк, а другие - для заполнения индекса. Это не обязательно одно и то же (я бы подумал). – einpoklum

+0

@einpoklum: Хорошо, вижу. См. Мое редактирование, которое, надеюсь, прояснит ситуацию. – HighCommander4

+0

Проясняет некоторые вещи, но не мой вопрос. Я имею в виду, что использует Indexer для создания своего индекса? Делает ли он свой собственный анализ или выполняет ли он анализ кода, который вы перечисляете как (2.)? – einpoklum