У вас есть опечатка в добытчике. Ваши if
условия фактически устанавливают значение поля экземпляра, вместо проверки его:
if (this.hasDriverLicence = true)
Это должно быть:
if (this.hasDriverLicence == true)
Или лучше просто:
[ 112]Поэтому переменная присваивается, но никогда не используется в вашем коде.
Разработка
Причина, по которой сингл =
компилируется, но IDE выдает предупреждение о том, что переменная никогда не используется, заключается в том, что присвоение Оператор возвращает присвоенное значение .
Например, оператор:
myVariable = 1
... возвращает 1
.
Поэтому, когда вы неправильно проверяете назначение (=
), а не примитивное равенство (==
), вы всегда будете проверять значение вашего назначения (в вашем true
в первом условии, которое всегда будет выполняться, false
во втором, что, следовательно, никогда не будет выполняться).
Редактор Eclipse CDT довольно хорошо выделяет код, основанный на макросах, которые вы объявляете быть активным. Вы можете проверить это.
Подумайте о том, чтобы посмотреть на «Сына Unifdef», процитированного в ответе на . Есть ли препроцессор C который устраняет блоки #ifdef на основе значений, определенных / неопределенных? . Это не визуальный редактор - он, однако, взял бы код C (или код с директивами препроцессора C в нем) и сгенерировал измененный файл, который вы могли бы затем сравнить с оригиналом.
Мне интересно упоминание Informix 4GL (I4GL). Генерируемый им код C, AFAIK, не содержит конструкций #ifdef
. По крайней мере, вывод не мог содержать, когда я отвечал за это. (Какую версию I4GL вы используете?) Есть много записей #line
; они позволяют вам сгенерировать код обратно в соответствующий источник I4GL. У меня есть сценарий, который преобразует их в простые комментарии C, так что я могу использовать отладчик ( gdb
или dbx
или ... уничтожить мысль, sdb
или adb
) в скомпилированном коде. И я также видел препроцессоры (оба cpp
и m4
), используемые для генерации исходного кода I4GL для отправки в компилятор I4GL.
Для редактора 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
] - это удобный способ найти предопределенные макросы для вашей платформы.)
Если вы пользователь Linux и также используете GNOME, то я бы рекомендовал GEdit . Мне очень понравилось после того, как я установил некоторые плагины для Intellisense, просмотра файлов и т. Д. Если вы не используете GNOME, но по-прежнему используете Linux (KDE), вы можете использовать Kate . Я не играл с ним слишком долго, поэтому мне нечего сказать по этому поводу. GEdit будет работать в KDE, но не будет выглядеть правильно.
Если вы используете Windows и у вас действительно хороший ПК, попробуйте Netbeans (да, это также для C ++, а не только для Java). Если нет, то всегда есть Visual C ++ 2008 (хотя все еще довольно сильно зависит от оперативной памяти).
I '
В Emacs есть режим hide-ifdef (мне никогда не приходилось использовать его самостоятельно, поэтому я не могу ручаться за его качество)
Можно также попробовать uniformdef , что проще, чем sunifdef.