* Иногда * выдает ошибку при присвоении константе в Delphi

Я использую Delphi 2007 со всеми исправлениями и обновлениями.

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

procedure MyProcedure;
const
  UniqueValue: integer = 0;
begin
  //some code
  Inc(UniqueValue);
  //some more code
end;

Команда Inc () должна завершиться ошибкой, потому что вы не можете присвоить константе. В одном проекте я получаю сообщение об ошибке (я назову этот проект «Точный»). В другом проекте я не получаю ошибок (назову его «Bogus»). Я тоже не получаю никаких предупреждений. Я не могу понять, почему компилятор пропускает этот неправильный код.

Вот что я пробовал в проекте Bogus:

1. Введите очевидную ошибку, например введите "slkdjflskdjf" в середине строки.

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

2 - Удалите .DCU и перестройте проект.

Результат: заново создается .DCU, что еще раз доказывает, что проект действительно компилирует этот ошибочный код.

Есть ли у кого-нибудь мысли о том, почему могло произойти такое поведение? И, более конкретно, почему это происходит в одном проекте, а в другом - нет? Есть ли какая-то неясная опция компилятора, позволяющая назначать константы?

И последнее замечание: оба проекта преобразованы из Delphi 5. В Delphi 5 с аналогичным кодом они оба компилируются нормально.

Изменить: спасибо за вашу помощь. После изменения директивы назначаемых типизированных констант я могу добиться согласованного поведения в обоих проектах. Сегодня я узнал кое-что новое ...


person JosephStyons    schedule 24.04.2009    source источник


Ответы (4)


Для этого есть опция «Назначаемые типизированные константы» в параметрах компилятора. Его также можно включить с помощью "{$ J +}" в вашем коде.

person Ville Krumlinde    schedule 24.04.2009

Может быть, эти проекты отличаются настройкой директивы компилятора $ J?

person mghie    schedule 24.04.2009

Я бы посоветовал проверить параметры проекта, раздел Компилятор, и посмотреть, заметите ли вы какие-либо различия. Возможно, у вас включен параметр Назначаемые типизированные константы в проекте Bogus.

person Diego    schedule 24.04.2009

Как уже говорили другие, это почти наверняка директива {$J+}.

Если у вас есть инструмент сравнения, вы можете сравнить файлы проекта, чтобы увидеть, чем они отличаются - это просто текстовые файлы - для решения аналогичных проблем в будущем.

person Mark Pim    schedule 24.04.2009