![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вот такая вот непонятная Фигня? [D6]
SuMaga © (2002-07-25 12:13:00)В шестом дельфи нарвался вот на что :
const
K:integer=1;
procedure m1;
begin
k:=2; //-------------> Ошибка ?
end;
Это ТАК задумано , или это просчет разработчиков ?
(В пятом все работает нормально)
SuMaga (2002-07-26 14:35:00) [1]я заметил уже :)
oomneeq (2002-07-26 14:18:00) [2]SuMaga © (25.07.02 20:47)
Да понял, понял..:)
>Да вот тоока компилятор дельх 6 оказался замудр!!
Да в этом смысле компилятор он не мудрее.
Project Options|Compiler|Assignable typed constants
есть и у дельпхи 5 тоже.
SuMaga (2002-07-25 20:47:00) [3]Братан Меня ты не так понял!!!
напр нужен такой код:
const st:byte=1;
procedure TForm1.Button1Click(Sender: TObject);
begin
st:=2;
if st<>1 then exit;
//основной код который выпол тока один раз
end;
по правилам паскаля все должно было работать ,
Да вот тоока компилятор дельх 6 оказался замудр!!
(спасибо Skier за подсказку!!! )
bad-md (2002-07-25 20:44:00) [4]oomneeq, Ну так и я об этом же.
oomneeq (2002-07-25 20:40:00) [5]Отличие
procedure XXX;
const
cd: Integer = 10;
begin
...
end;
от
procedure XXX;
var
cd: Integer; //(a)
cd: Integer=10; //(b)
begin
...
end;
в том, что в 1 случае значение cd сохраняется от вызова к вызову
таким, каким его оставили выходя из XXX последний раз, тк. типизированные константы всегда сохраняются в области данных, а не в стеке, в отличие от обычных локальных переменных.
Поэтому во 2 случае оно при каждом новом входе в XXX либо неопределенно - стек непостоянен (a) либо всегда одно и тоже (b).
Случай 1 может использоваться как альтернатива глобальной переменной, когда значение должно храниться постоянно, однако доступ к нему нужен только из этой процедуры.
bad-md (2002-07-25 20:15:00) [6]Хех, constоно и есть const, например
procedure TSomeClass.DoSomething;
const
cd: Integer = 10;
begin
.............
if SomeVar then cd := 11 else cd := 14;
end;
Предположим, что при первом вызове процедуры - SomeVar = True.
При следующем cd чему равна? (cd = 11);
Т. е. const оно так и надо!!! (читайstatic)
Sorry за треп...
SuMaga (2002-07-25 18:58:00) [7]Всем Саулики(пасибки) !!!
TTCustomDelphiMaster (2002-07-25 13:39:00) [8]Eugene Lachinov © (25.07.02 12:45)
А разве SuMaga © пишет
const
K:integer=1;
в процедуре?
Если бы он написал
procedure m1;
const
K:integer=1;
begin
k:=2;
end;
тогда у меня и небыло бы вопросов.
SPeller (2002-07-25 13:05:00) [9]
> Skier © (25.07.02 13:02)
> >SPeller
>
> А ты видишь разницу между
> var K:integer и
> var K:integer = 10 !?
Где-то при описании глобальных переменных можно писать
var k:integer = 10;
А вообще, зачем это? Пропиши при инициализации k:=10; и всё.
Skier (2002-07-25 13:02:00) [10]>SPeller
А ты видишь разницу между
var K:integer и
var K:integer = 10 !?
Eugene Lachinov (2002-07-25 13:01:00) [11]>SPeller
Тут var K:integer = 1;
SPeller (2002-07-25 12:59:00) [12]
> Eugene Lachinov © (25.07.02 12:45)
> >TTCustomDelphiMaster
> var нельзя описывать в процедурах и функциях
Это как это?
Всегда делал и нормально работает:
procedure SomeProc;
var K:integer; tm:string;..........
begin
.....
Eugene Lachinov (2002-07-25 12:45:00) [13]>TTCustomDelphiMaster
var нельзя описывать в процедурах и функциях
TTCustomDelphiMaster (2002-07-25 12:38:00) [14]SuMaga © (25.07.02 12:13)
А почему constа не var?
Eugene Lachinov (2002-07-25 12:36:00) [15]Также бывает полезно {$WRITEABLECONST ON}
Skier (2002-07-25 12:15:00) [16]>SuMaga
Project Options|Compiler|Assignable typed constants := True