Есть ли какое-либо средство исправления для блюза препроцессора?

У вас есть опечатка в добытчике. Ваши if условия фактически устанавливают значение поля экземпляра, вместо проверки его:

if (this.hasDriverLicence = true)

Это должно быть:

if (this.hasDriverLicence == true)

Или лучше просто:

[ 112]

Поэтому переменная присваивается, но никогда не используется в вашем коде.

Разработка

Причина, по которой сингл = компилируется, но IDE выдает предупреждение о том, что переменная никогда не используется, заключается в том, что присвоение Оператор возвращает присвоенное значение .

Например, оператор:

myVariable = 1  

... возвращает 1.

Поэтому, когда вы неправильно проверяете назначение (=), а не примитивное равенство (==), вы всегда будете проверять значение вашего назначения (в вашем true в первом условии, которое всегда будет выполняться, false во втором, что, следовательно, никогда не будет выполняться).

9
задан Brian Tompsett - 汤莱恩 4 February 2016 в 22:13
поделиться

6 ответов

Редактор Eclipse CDT довольно хорошо выделяет код, основанный на макросах, которые вы объявляете быть активным. Вы можете проверить это. alt text

15
ответ дан 4 December 2019 в 08:34
поделиться

Подумайте о том, чтобы посмотреть на «Сына Unifdef», процитированного в ответе на . Есть ли препроцессор C который устраняет блоки #ifdef на основе значений, определенных / неопределенных? . Это не визуальный редактор - он, однако, взял бы код C (или код с директивами препроцессора C в нем) и сгенерировал измененный файл, который вы могли бы затем сравнить с оригиналом.

Мне интересно упоминание Informix 4GL (I4GL). Генерируемый им код C, AFAIK, не содержит конструкций #ifdef . По крайней мере, вывод не мог содержать, когда я отвечал за это. (Какую версию I4GL вы используете?) Есть много записей #line ; они позволяют вам сгенерировать код обратно в соответствующий источник I4GL. У меня есть сценарий, который преобразует их в простые комментарии C, так что я могу использовать отладчик ( gdb или dbx или ... уничтожить мысль, sdb или adb ) в скомпилированном коде. И я также видел препроцессоры (оба cpp и m4 ), используемые для генерации исходного кода I4GL для отправки в компилятор I4GL.

2
ответ дан 4 December 2019 в 08:34
поделиться

Для редактора Eclipse CDT работает довольно хорошо. Он показывает, какой код активен, а какой код # ifdef'ed, обеспечивает подсветку синтаксиса в коде, который # ifdef'ed, так что вы все еще можете легко его прочитать, и он может пошагово выполнять расширения макросов по одному, если вы нажимаете мышью поверх макроса.

Из командной строки cpp -dM filename.c обрабатывает файл и показывает только #defines, которые действуют. Например, в вашем коде он может выплевывать

#define DLEVEL 5
#define SIGNAL 1
#define STACK 200
#define STACKUSE 1

, не загромождая листинг другими директивами препроцессора или кодом C / C ++.

(В соответствующей заметке, cpp -dM / dev / null ] - это удобный способ найти предопределенные макросы для вашей платформы.)

6
ответ дан 4 December 2019 в 08:34
поделиться

Если вы пользователь Linux и также используете GNOME, то я бы рекомендовал GEdit . Мне очень понравилось после того, как я установил некоторые плагины для Intellisense, просмотра файлов и т. Д. Если вы не используете GNOME, но по-прежнему используете Linux (KDE), вы можете использовать Kate . Я не играл с ним слишком долго, поэтому мне нечего сказать по этому поводу. GEdit будет работать в KDE, но не будет выглядеть правильно.

Если вы используете Windows и у вас действительно хороший ПК, попробуйте Netbeans (да, это также для C ++, а не только для Java). Если нет, то всегда есть Visual C ++ 2008 (хотя все еще довольно сильно зависит от оперативной памяти).

I '

1
ответ дан 4 December 2019 в 08:34
поделиться

В Emacs есть режим hide-ifdef (мне никогда не приходилось использовать его самостоятельно, поэтому я не могу ручаться за его качество)

1
ответ дан 4 December 2019 в 08:34
поделиться

Можно также попробовать uniformdef , что проще, чем sunifdef.

0
ответ дан 4 December 2019 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: