* Иногда * получаю ошибку при назначении константы в Delphi - PullRequest
8 голосов
/ 24 апреля 2009

Я использую 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 с похожим кодом они оба прекрасно компилируются.

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

Ответы [ 4 ]

14 голосов
/ 24 апреля 2009

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

5 голосов
/ 24 апреля 2009

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

4 голосов
/ 24 апреля 2009

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

3 голосов
/ 24 апреля 2009

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

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

...