Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

соглашение о передаче параметров   Найти похожие ветки 

 
Stexen ©   (2006-09-18 10:05) [0]

Тут проблемма одна возникла, нашелся способ но ниочень, имхо,
вообщем допустим есть последовательность процедур main, a2,a3, a4, a5...
procedure main();
begin
  a2();
@@a_1:
  какие то действия
  выход из процедуры
end;

Процедура a2 вызывает a3, a3 ->a4, a4->a5 и тд.

Вообще каждая процедура знает адресс @@a_1, но незнает из какой процедуры вызывалась, и допустим на каком то моменте в какой то из процедур происходит ошибка(пользовательская(например файл не найден или еще что-то)), нужно не возвращаясь в предыдущие процедуры сразу прыгнуть в @@a_1.
Вот но в таком случае возникает что в стэке хранится что попало, и могут произойти различные ошибки.
Затем я подумал, что можно в стэк перед вызовом процедуры из main  пихать какую нибудь подпись например 16 байтную. а на точке @@a_1 попить до тех пор пока не достану все до подписи включительно.Вроде бы должно работать, но мне кажется что я что-то мог забыть!!!??????
Не подскажите какие возможны баги в данной ситуации, кроме совпадения подписи...


 
Курдль ©   (2006-09-18 10:07) [1]


> Затем я подумал, что можно ...

Лучше на пару-тройку месяцев отсесть от компа и почитать книжки по программированию.


 
Rouse_ ©   (2006-09-18 10:14) [2]

SEH все сделает за тебя, главное лови выход в первой процедуре, куда вернуться хочешь.


 
Stexen ©   (2006-09-18 10:18) [3]


> SEH все сделает за тебя

Где от видел про это, но не помню как и что, можешь по подробнее описать или скинуть где почитать....


 
Stexen ©   (2006-09-18 10:19) [4]


> Stexen ©   (18.09.06 10:18) [3]

а это про ислючения?


 
Юрий Зотов ©   (2006-09-18 10:21) [5]

> Stexen ©   (18.09.06 10:05)  

procedure main();
begin
 try
   a2();
 except
   какие то действия
 end    
end;

А в процедурх a2, a3, a4, a5 и т.д. нужно просто возбудить исключение.


 
Stexen ©   (2006-09-18 10:22) [6]


> SEH все сделает за тебя

Так если например сделать так и вызввать деление на ноль он прыгнет на точку которую я пушил, а стэк этот метод очистит?


 
Stexen ©   (2006-09-18 10:25) [7]


> А в процедурх a2, a3, a4, a5 и т.д. нужно просто возбудить
> исключение

отлично, что то туплю...


> Лучше на пару-тройку месяцев отсесть от компа и почитать
> книжки по программированию

Ты прав :))))))


 
Rouse_ ©   (2006-09-18 12:12) [8]

Угу, SEH - structured exception handling


 
evvcom ©   (2006-09-19 08:44) [9]

А при чем здесь "соглашение о передаче параметров"?


 
Anatoly Podgoretsky ©   (2006-09-19 09:12) [10]


> А при чем здесь "соглашение о передаче параметров"?

Может на что сгодится


 
Stexen ©   (2006-09-19 09:55) [11]


> А при чем здесь "соглашение о передаче параметров"?

Ну изначально хотел самостоятельно стэк чистить, вот и хотел узнать что там говорится поподробнее, а то забыл, а вообще оно по-моему называется соглашение о связи. Почему связи не понимаю, наверное связи между подпрограммами


 
Anatoly Podgoretsky ©   (2006-09-19 10:00) [12]


> а вообще оно по-моему называется соглашение о связи.

Больше не читай книги этих переводчиков.


 
Stexen ©   (2006-09-19 10:01) [13]


> Больше не читай книги этих переводчиков

:)



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.051 c
2-1158843472
arhis
2006-09-21 16:57
2006.10.08
Как узнать количество знаков после запятой?


1-1156694491
Still Swamp
2006-08-27 20:01
2006.10.08
Баг с TMainMenu


2-1158842257
Yegorchic
2006-09-21 16:37
2006.10.08
Показ окна программы


15-1158293479
Pazitron_Brain
2006-09-15 08:11
2006.10.08
Модель общественного повидения


2-1158837997
ququ
2006-09-21 15:26
2006.10.08
Move





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский