Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вот такая вот непонятная Фигня? [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


Наверх

Титульная страница Поиск, карта сайта Написать письмо