| 
| 
 | Вопрос # 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
 
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |