forward в паскале



Forward паскаль

Автор Ёергей Яшановский задал вопрос в разделе Другие языки и технологии

Forward в Pascal и других языках и получил лучший ответ

Ответ от Ўрий Копнин[гуру]
Паскаль однопроходный компилятор, поэтому,
procedure P1;
begin
P2(10); //Ошибка, в момент компиляции P1, функция P2 ещё не скомпилирована и параметры её вызова не известны как и её имя, компилятор в момент компиляции P1 ничего не знает о P2, т. к. она ниже.
end;
procedure P2(I: Integer);
begin
end;
Ключевое слово forward переводится как опережающий, что следует понимать как опережающее объявление функции или процедуры, что подразумевает, что компилятор должен только проанализировать как вызывается эта функция и занести её имя в таблицу имен, а реализация этой функции с телом begin end; будет ниже.
forward procedure P2(I: Integer); //Объявление процедуры без begin end;
procedure P1;
begin
P2(10); //Теперь ошибки нет, в момент компиляции P1, о процедуре P2 уже всё известно.
end;
//Реализация P2
procedure P2(I: Integer);
begin
end;
А вообще, у Вас там мешанина какая-то не проще ли было пример привести? Моя твоя не понимай...
Юрий Копнин
Мыслитель
(5826)
Приведите пример уже, кто кого вызвал. В момент компиляции ни кто ни кого ни куда не вызывает...

Ответ от Алексей Сутягин[гуру]
В скриптовых языках допустимо польностью считать и только потом компилировать. Паскаль серьезный компилятор, он останавливается на первой же ошибке, а то что уже скомпилировано - при повторе пропускается. Ты наверное не видел проектов тысяч на сто строк кода, ты бы при каждой компиляции ждал минут 5 чтобы продолжить, а так по факту он компилирует только измененные модули, но есть и кнопка "скомпилировать все заново", на случай если кажется что что-то не так работает

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Forward в Pascal и других языках
Паскаль язык программирования на Википедии
Посмотрите статью на википедии про Паскаль язык программирования
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*