Все сервисы Хабра
Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Закрыть
Задать вопрос
MrSayMyName
@MrSayMyName
C++
Как получить имя функции в теле функции?
Доброго времени суток.
В общем то суть вопроса изложена. Как получить имя функции в теле функции? И можно ли его использовать для вызова этой же функции (рекурсия)?
Вопрос задан
более трёх лет назад
237 просмотров
1
комментарий
Подписаться
1
Оценить
1
комментарий
Facebook
Вконтакте
Twitter
Алексей Уколов
@alexey-m-ukolov
А что мешает просто в коде функции вызвать её саму по имени, зачем брать его откуда-то? Ведь имя на ходу поменяться не может.
Написано
более трёх лет назад
Помогут разобраться в теме
Все курсы
Яндекс Практикум
Разработчик C++
9 месяцев
Далее
Яндекс Практикум
Разработчик C++ расширенный
12 месяцев
Далее
Яндекс Практикум
Мидл разработчик С++
4 месяца
Далее
Решения вопроса
0
Пригласить эксперта
Ответы на вопрос
2
romy4
@romy4
Exception handler
__FUNCTION__();
Ответ написан
более трёх лет назад
5
комментариев
Нравится
2
5
комментариев
Facebook
Вконтакте
Twitter
romy4
@romy4
в разных компиляторах макрос может отличаться
Написано
более трёх лет назад
romy4
@romy4
я проверил. в gnu cpp не работает такая конструкция.
Написано
более трёх лет назад
romy4
@romy4
kloppspb
: я их никогда не использовал, если честно.
но можно написать макрос или за хардкодить/
это пример (мой) нерабочий, но суть примерно как взять указатель на собственную функцию
#include
int a=5;
void foo()
{
void *p = __builtin_return_address(0);
void (*pf)() = reinterpret_cast(p);
std::cout<0)
{
a--;
(*pf)();
}
}
int main()
{
<-->foo();
}
Написано
более трёх лет назад
romy4
@romy4
kloppspb
: __builtin_return_address(0); - реальная функция gcc возвращающая собственный адрес
Написано
более трёх лет назад
romy4
@romy4
kloppspb
: не void (*pf)() = reinterpret_cast(p);
а void (*pf)() = reinterpret_cast<void(*)()>(p);
потёрлись угловые скобки
и std::cout<<p<<std::endl;
while(a<0){
Написано
более трёх лет назад
iv_k
@iv_k
> И можно ли его использовать для вызова этой же функции (рекурсия)?
нет, но можно вызывать просто эту же функцию
foo()
{
foo();
}
Ответ написан
более трёх лет назад
Комментировать
Нравится
Комментировать
Facebook
Вконтакте
Twitter
Ваш ответ на вопрос
Войдите, чтобы написать ответ
Войти через центр авторизации
Похожие вопросы
C++
Простой
Влияет ли, передаёшь ты в функцию аргументы по ссылке или по значению, на производительность и память?
2 подписчика
20 часов назад
143 просмотра
2
ответа
C++
Простой
А нужно ли заменять dynamic_cast?
1 подписчик
21 час назад
47 просмотров
1
ответ
C++
Простой
Как понять что переполняет память в C++?
1 подписчик
01 нояб.
214 просмотров
1
ответ
C++
Средний
Как исправить некорректное отображение кириллицы?
1 подписчик
30 окт.
181 просмотр
3
ответа
Компьютерные сети
+1 ещё
Средний
Как обнаружить сканирование портов по логу сетевого трафика?
7 подписчиков
29 окт.
3066 просмотров
1
ответ
C++
Простой
Какой подход выбрать для представления Chunk?
1 подписчик
28 окт.
171 просмотр
1
ответ
C++
+2 ещё
Простой
Как подключить SFML к Clion на MacOs?
1 подписчик
14 окт.
93 просмотра
1
ответ
C++
Средний
Как определить виртуальные методы в полной специализации шаблона?
1 подписчик
13 окт.
66 просмотров
1
ответ
C++
+1 ещё
Простой
Только начинаю изучать Qt, не знаю как убрать ошибки :-1: ошибка: collect2.exe: error: ld returned 1 exit status?
1 подписчик
12 окт.
119 просмотров
0
ответов
C++
Простой
Какую библиотеку использовать для отображения OHLC свечей в приложении на C++?
1 подписчик
11 окт.
88 просмотров
0
ответов
Показать ещё
Загружается…
Вакансии с Хабр Карьеры
Разработчик плагина для Wordpress
TripShock Adventures
от 1 200 до 2 500 $
Senior Elixir Developer
Clickavia
от 3 000 до 4 000 $
Data Analyst
Clickavia
от 80 000 до 100 000 ₽
Минуточку внимания
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации
Закрыть
Реклама