Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Sinclair, Вы писали:
I>>>I>>> type
I>>> pProc = procedure(s:string);
I>>> function X(s:string):pProc;far;
I>>> procedure X1;far;
I>>> begin;
I>>> WriteLn(s);
I>>> end;
I>>> begin;
I>>> X := @X1;
I>>> end;
I>>>
S>>Отличный пример. А что мешает ему скомпилиться? Извини, у меня TP для проверки нету.
I>Тип pProc можно использовать для параметра, но нельзя для возвращаемого значения, это можно обойти хаком.
I>>>Ну и мануал, там есть подсказка
S>>Ну вот в подсказке вроде очень похожий пример. Неужели TP умеет escape-analysis и запрещает передавать адреса вверх по стеку, разрешая вниз?
I>В этом месте в турбопаскале большая дыра, почти ничем не прикрытая.
Сразу говорю — ничего не знаю про класический паскаль, говорю про дельфи(начиная с D3, не знаю, что там раньше было).
Так вот, в дельфи — ты сам лично заткнул глотку компилятору, вызвав оператор @.
По хорошему нужно писать X := X1; Тогда те компилер скажет, что возвращать ссылку на вложенную процедуру — очень плохо. как только ты взял указатель на процедуру — то с ним ты естественно волен делать что хочешь, указатель — это всего лишь указатель..