C ++, получить имя вызывающей функции через указатель:
Вариант 1: сверните свой собственный регистратор имен функций
Если вы хотите разрешить «указатель на функцию» на «имя функции», вам нужно будет создать собственную таблицу поиска всех доступных функций, затем сравнить адрес вашего указателя с ключом в таблице поиска и вернуть имя.
Реализация, описанная здесь: https://stackoverflow.com/a/8752173/445131
Вариант 2: Использование __func__
GCC предоставляет эту магическую переменную, которая содержит имя текущей функции в виде строки. Это часть стандарта C99:
#include <iostream>
using namespace std;
void foobar_function(){
cout << "the name of this function is: " << __func__ << endl;
}
int main(int argc, char** argv) {
cout << "the name of this function is: " << __func__ << endl;
foobar_function();
return 0;
}
Выход:
the name of this function is: main
the name of this function is: foobar_function
Примечания:
__FUNCTION__
- это другое имя для __func__
. Более старые версии GCC распознают только это имя. Однако это не стандартизировано. Если требуется максимальная переносимость, мы рекомендуем использовать __func__
, но предоставить препроцессору альтернативное определение, чтобы определить его, если оно не определено:
#if __STDC_VERSION__ < 199901L
# if __GNUC__ >= 2
# define __func__ __FUNCTION__
# else
# define __func__ "<unknown>"
# endif
#endif
Источник: http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html