Предопределенные макросы для имени функции __func__
Я пытаюсь создать функцию сообщения журнала отладки, которая записывает файл, строку и функцию, из которой было вызвано сообщение журнала.
#define DEBUG_PANIC(p) CLogging::Debuglogf( "Debug marker (%s) - ::%s() in file: %s(%d)", p, __func__ , __FILE__, __LINE__ );
Приведенный выше код работает на некоторых компиляторах, но не на всех. Мой код должен быть совместим с GCC, а также с студиями Microsoft Visual. Я добавил ниже определения, чтобы помочь с совместимостью.
#ifndef __FUNCTION_NAME__
#if defined __func__
// Undeclared
#define __FUNCTION_NAME__ __func__
#elif defined __FUNCTION__
// Undeclared
#define __FUNCTION_NAME__ __FUNCTION__
#elif defined __PRETTY_FUNCTION__
// Undeclared
#define __FUNCTION_NAME__ __PRETTY_FUNCTION__
#else
// Declared
#define __FUNCTION_NAME__ "N/A"
#endif // __func__
#endif // __FUNCTION_NAME__
#define DEBUG_PANIC(p) CLogging::Debuglogf( "Debug marker (%s) - ::%s() in file: %s(%d)", p, __FUNCTION_NAME__, __FILE__, __LINE__ );
Проблема с приведенным выше фрагментом кода заключается в том, что макрос #else активен на всех компиляторах, а остальные макросы - нет. другими словами#if defined __func__
ложно на компиляторах, где__func__
этопредопределенный макрос.
Мой вопрос
Как создать макрос кросс-компилятора, чтобы найти имя функции?Как я могу сказать, если__func__
может быть использован?