Предопределенные макросы для имени функции __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__ может быть использован?

Ответы на вопрос(4)

Ваш ответ на вопрос