const
y0: integer = 20;
//...
y0 := Image1.Height - y0;
//...
constТочно так же... Константу меняешь
y: Integer = 20;
begin
y := 55;
end;
Это, а {$J+} не пробовали? Или Assignable typed constants в настройках?
Оно!
А че эт так? В каких целях эта директива не была включена "автоматически"?
Может, от того, что константы как бы синонимы слова "постоянный"..)
Вообще, никогда не понимал, почему бы не сделать то же самое, только в секции var )
> Вообще, никогда не понимал, почему бы не сделать то же самое, только в секции var )
1. Чтобы не инициализировать.
2. Чтобы локальная переменная, что внутри функции, инициализировалась только при старте программы и сохраняла значение между вызовами функции.
Т.е. типизированные константы лучше не использовать..
А как тогда задавать начальные значения?
В основной пограмме после бегина?
ЗЫ: все равно не могу понять что плохого это может представлять для программы.
var x:integer=10; , или я что-то не понял?)
Прикол.. ФП тоже разрешает такое делать..Еще на ТП надо попробовать)
Можешь не пробовать. Это расширение Object Pascal-я. В Турбо такого не было.
Хочешь ложку дегтя к переменным со стартовым значением? Попробуй инициализировать локальную переменную:
procedure p;
var v: integer = 0;
begin
// ...
end;
Мне кажется, что компилятор скажет обо мне то, что он давно уже думал
Типа что в подпрограмме в описании переменных нельзя инициализировать локальную переменную, т.к. нужно сразу выделять память, хотя... Хотя почему бы это не сделать потом?.. Ну это догадки Сейчас попробую.
Добавлено через 4 мин.
Точно! Дык я угадал? (хотя, вроде, я где-то это только что прочитал..не помню).
И что делать? Константы, хоть и не строго, но запретили. Инициализировать переменную нельзя..
Добавлено через 2 мин.
А-а-а! Вроде дошло! Ведь до того, как дойдет время до выполнения процедуры и инициализации переменной, значение 0 надо УЖЕ где-то хранить, да?
procedure p is
V: Integer := 15;
C: constant Integer := 10;
begin
-- Изменяем сколько угодно значение переменной V, но никакими
-- уговорами нельзя заставить компилятор допустить изменение С
-- константа - значит константа...
end p;
> А как тогда задавать начальные значения?
В дельфе меняй типизированные константы и не парься. Они только называются константами, слова другого не подобрали.
Не знал, что в Делфи по-умолчанию нельзя менять типизированные константы. А как тогда статические переменные делать в процедурах? В глобальную область выводить что-ли?
Меня другое в дельфе напрягает
const
T = Time; // время компиляции
A: integer = 5;
B = A; // и так нельзя
E = exp(1); // и так нельзя!!!!
program tst;
procedure p;
var count: integer = 0; attribute(static);
begin
inc(count);
writeln('count = ', count);
end;
var i: integer;
begin
for i := 0 to 9 do
begin
p;
end;
end.
Vlady@V877$ gpc tst.pp
Vlady@V877$ ./a.out
count = 1
count = 2
count = 3
count = 4
count = 5
count = 6
count = 7
count = 8
count = 9
count = 10