IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Builder 6.0, Функции
сообщение
Сообщение #1


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Есть 3 функции...1ая и вторая вызывают 3ью..можно ли как то без введения дополнительных параметров определить в 3ей функции какая функция её вызвала?..как?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


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

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(hardcase @ 19.02.2008 11:18) *

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


Мда...значит легче параметр добавить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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

Fanat, __FUNC__ передавай в вызываемую программу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(volvo @ 19.02.2008 11:46) *

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


А ето что такое?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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

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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Цитата(volvo @ 19.02.2008 12:13) *

blum.gif


good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.11.2021 6:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name