Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.08;
Скачать: CL | DM;

Вниз

Разве это не константа?   Найти похожие ветки 

 
Rouse_ ©   (2003-08-27 14:39) [0]

Здравствуй уважаемый All

На днях пришлось переписывать пару модулей бывшего нашего программиста (уже уволенного) и меня несколько покоробила куча IF-ов сделанных им, заменил все это дело на CASE и получил ошибку: Constant expression expired (кажется так, пишу с компа без Дельфи). Смотрю, все константы определены как:
const
WM_CONST: Integer = 1;
...

и т.д.
Блок CASE выглядит как:

case Value of
WM_CONST:
begin
...
end;
end;


В таком виде WM_CONST - Дельфи почему то не считает константой, но если изменить ее объявление на:

const
WM_CONST = 1;
...


То все начинает работать.

Вопрос: Разве первый вариант объявления не является константой? Что-то ничего в хелпе не нашел :(

Заранее спасибо


 
Романов Р.В. ©   (2003-08-27 14:42) [1]

Константы в функции прописаны?


 
HolACost! ©   (2003-08-27 14:42) [2]

Неа! Это на сколько я думаю было ещё из паскаля оставлено - т.к. там нельзя было значение переменно указать до начала проги - а дельфи можно в варе! Это не константа - это уже переменная со значением!


 
jack128 ©   (2003-08-27 14:53) [3]

Rouse_ © (27.08.03 14:39)
есть какая то дериктива компилятора в зависемости от которой WM_CONST это или комстанта или инициализированная переменная. По умолчанию - это пеерменная


 
Rouse_ ©   (2003-08-27 15:00) [4]

Тэкс, значит WM_CONST: Integer = 1 это переменная, а WM_CONST = 1 это константа? Интересненько, спасибо, проверю вечером.
Раньше просто как-то не вдавался в такие подробности и оформлял константы как второй вариант, а у меня почти шестнадцать страниц в стиле первого варианта оформлены, лениво удалять определение типов для каждой константы (переменной :) код как говорил писал не я, я просто переписываю.


 
Camus ©   (2003-08-27 15:00) [5]

См. директиву $J и птичку Assignable typed constants (Project Options, вкладка Compiler)


 
DmS   (2003-08-27 15:01) [6]

{$J+}


 
han_malign ©   (2003-08-27 15:06) [7]

Это называется типизированная константа, или инициализируемая статически размещаемая(для метода класса, для всех экземпляров имеет одно и тоже значение(последнее присвоенное)) переменная, в зависимости от опций компиляции
{$WRITEABLECONST ON/OFF}
В D7 - по умолчание OFF(D1..5 - ON)


 
Anatoly Podgoretsky ©   (2003-08-27 15:20) [8]

Это не константа, Борланду были нужны инициализированные переменные, и они долго не мудрствуя назвали их константой, это потом вызвыало много проблем.
После они наконец изобрели инициализированные переменные, но это было потом и размещение у них различное, не локакльное.


 
Rouse_ ©   (2003-08-27 20:09) [9]

Спасибо за советы, все верно. Самое обидное, что дома (Д6 - нелегальная) без всяких диретив работает, а на работе (Д7 - лицензия) ошибки, будем знать.

Еще раз снкс за разьяснения.

ЗЫ: Интересно, сколько еще таких тонкостей я найду, за 7 лет работы только редкая неделя без таких вот мелочей (вроде бы и не нужных на первый взгляд)



Страницы: 1 вся ветка

Текущий архив: 2003.09.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-24533
Lina
2003-08-26 14:51
2003.09.08
ListView


9-24294
BANick
2003-03-04 17:45
2003.09.08
Люди помогите с Опенгл плиииз


7-24720
qwerty335@yandex.ru
2003-06-24 14:48
2003.09.08
Запретить доступ к Floppy диску


7-24731
Mishel
2003-06-25 14:49
2003.09.08
Как избавиться от потерь при чтении I/O портов?


1-24450
Ann
2003-08-25 15:40
2003.09.08
Компоненты в Run Time