Page 1 of 1
Проблемка с посроением скрипта
Posted: 04.12.2006 3:55
by Drunk Iguana
Вощем такая проблема.
Пытаюсь юзать процедуру которая описана в коде ниже, пишет во такое
4:53:08 [***]: Compiler: [Error] (***.sc at 29:2): Unknown identifier 'poisk'
с этим мона как то бороться или мож миралекс пофиксит? ) или искать обходные пути?
чтоб было понятнее. такая конструкция выдаст ошибку на третей строке
Code: Select all
procedure odin;
begin
dva;
end;
procedure dva;
begin
odin;
end;
Re: Проблемка с посроением скрипта
Posted: 04.12.2006 7:03
by CFA
ето особенности паскаля
Code: Select all
procedure dva; forward;
procedure odin;
begin
dva;
end;
procedure dva;
begin
odin;
end;
Posted: 04.12.2006 8:14
by Edred
Либо переставить в файле процедуру dva выше процедуры odin. В паскале, если ты используешь в тексте скрипта или в какой-нибудь процедуре/функции другую процедуру/функцию - она должна быть прописана в тексте программы раньше, чем она используется.
То, что написано в примере - вообще бред. У тебя замкнутые перекрестные вызовы, то есть бесконечная рекурсия процедур. Ни один язык программирования не поддерживает такого. Ведь рекурсия жрет память за счет клонирования вызовов. Рано или поздно память заканчивается, что приводит к краху программы.
Posted: 04.12.2006 11:08
by Drunk Iguana
Все норм никаких крахов небуит.
Жаль вощем что такая фишка непашет, буду думать как лучше поправить.
Posted: 04.12.2006 11:46
by CFA
Drunk Iguana wrote:Все норм никаких крахов небуит.
Жаль вощем что такая фишка непашет, буду думать как лучше поправить.
мой пост то прочитать не ага?
если функция вызываеться раньше чем, описана - нада сделать вот так
procedure dva; forward;
Posted: 04.12.2006 17:12
by Drunk Iguana
а сенк ) чет ступил незаметил )
Posted: 04.12.2006 22:48
by Edred
CFA wrote:мой пост то прочитать не ага?
если функция вызываеться раньше чем, описана - нада сделать вот так procedure dva; forward;
А ты его скрипт прочитал? Процедуру dva ты форварднешь, но в ней-то odin вызывается...
Хотя вполне допускаю, что все равно работать будет. Я паскаль 15 лет назад изучал, так что все не упомнишь...
Posted: 04.12.2006 23:18
by DerMeister
Edred wrote:CFA wrote:мой пост то прочитать не ага?
если функция вызываеться раньше чем, описана - нада сделать вот так procedure dva; forward;
А ты его скрипт прочитал? Процедуру dva ты форварднешь, но в ней-то odin вызывается...
Хотя вполне допускаю, что все равно работать будет. Я паскаль 15 лет назад изучал, так что все не упомнишь...
Можно.
http://www.geocities.com/SiliconValley/ ... l1005.html последний пример:
Code: Select all
procedure a;
begin
b; { illegal }
end;
procedure b;
begin
a;
end;
а:
Code: Select all
procedure b; forward;
procedure a;
begin
b; { now legal }
end;
procedure b;
begin
a;
end;
=_)***
Posted: 05.12.2006 1:52
by Edred
Ну что ж, век живи, век учись. В мое время в паскале (и тем более в алголе) такой штуки не было. Хз зачем она нужна, но пусть будет.