|
Вопрос # 1 210/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! Помогите, пожалуйста ответить на вопрос:
Процедуры и функции - коллизия обозначений и стек исполнения.
 |
Вопрос задала: s_ksuha (статус: Посетитель)
Вопрос отправлен: 18 декабря 2007, 20:59
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, s_ksuha!
коллизия обозначений? Скорее всего имеется ввиду то, что имеем две или больше функции с одинаковым именем. (в делфи можно, если добавить слово overload, о турбопаскале не помню, не буду утверждать) и компилятор не может выбрать, какой с прототипов ему подходит. например
procedure Foo(x:integer);overload;
procedure Foo(x:integer; z:integer = 1);overload;
//Такой вызов нормально
foo(1,2);
//А такой нет - компилятор не может определить, какая с перегруженных функций подходит
foo(2)
По поводу стека исполнения. Для платформы х86 стек общий для всех, хотя тут наверно имелось в виду абстрактное понятие.
Стек исполнения актуален при рекурсии, когда функция вызывает сама себя. тогда в стек складываются все локальные параметры (на самом деле они там уже есть, но это другое дело) и адрес текущей инструкции. после чего запускается функция. при выходе с функции восстанавливается адрес и локальные переменные.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 19 декабря 2007, 12:44
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|