Помощь - Поиск - Пользователи - Календарь
Полная версия: Builder 6.0
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Fanat
Есть 3 функции...1ая и вторая вызывают 3ью..можно ли как то без введения дополнительных параметров определить в 3ей функции какая функция её вызвала?..как?..
hardcase
Цитата(Fanat @ 19.02.2008 11:00) *
Есть 3 функции...1ая и вторая вызывают 3ью..можно ли как то без введения дополнительных параметров определить в 3ей функции какая функция её вызвала?..как?..
В управляемых средах (Java, .NET) подобный фокус возможен с помощью отражения и высокоуровневого анализа стека (реализуется в 2 строки).
В Билдере такое в принципе возможно: ассемблер + перелопачивание стека.
Fanat
Цитата(hardcase @ 19.02.2008 11:18) *

В управляемых средах (Java, .NET) подобный фокус возможен с помощью отражения и высокоуровневого анализа стека.
В Билдере такое в принципе возможно: ассемблер + перелопачивание стека.


Мда...значит легче параметр добавить...
volvo
В Билдере такое в принципе не возможно (я имею в виду, что программа, работающая стабильно, будет написана практически на чистом ассемблере, и ей будут недоступны многие "фишки" VCL; а программа, которая будет написана на С++ - будет работать очень нестабильно)

Fanat, __FUNC__ передавай в вызываемую программу...
Fanat
Цитата(volvo @ 19.02.2008 11:46) *

Fanat, __FUNC__ передавай в вызываемую программу...


А ето что такое?..
volvo
Это макрос такой - возвращает имя текущей функции, т.е., если сделать:

void f_3(const char *s = "")
{
ShowMessage(s);
}

void f_1()
{
f_3(__FUNC__);
}

void f_2()
{
f_3(__FUNC__);
}

, то получишь то, что тебе нужно...

Добавлено через 2 мин.
Хотя можно и так:
#define Call_f3 f_3(__FUNC__)
void f_3(const char *s = "")
{
ShowMessage(s);
}

void f_1()
{
Call_f3;
}
void f_2()
{
Call_f3;
}

blum.gif
Fanat
Цитата(volvo @ 19.02.2008 12:13) *

blum.gif


good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.