Имя функции в макросе

Рейтинг: 2Ответов: 1Опубликовано: 21.02.2011

Как в макросе получить имя функции (строчное значение), внутри которой макрос был использован?

#define MACRO() ...

void f1() {
     MACRO() // Здесь "f1"
}

void f2() {
     MACRO() // Здесь "f2"
}

Я что-то вроде когда-то видел, но забыл где (

Ответы

▲ 2Принят

Есть макрос __FUNCTION__, который содержит имя функции в строковом виде так, как оно прописано в исходном коде. И MS VC, и GCC его поддерживают. Если нужно печать имя функции в лог, делается так:

#define PRINT_NAME() printf("Function %s", __FUNCTION__)

voif func() {
    PRINT_NAME();
}