Macros predefinidas para o nome da função __func__

Eu estou tentando construir uma função de mensagem de log de depuração que registra o arquivo, linha e função de onde a mensagem de log foi chamada.

#define DEBUG_PANIC(p) CLogging::Debuglogf( "Debug marker (%s) - ::%s() in file: %s(%d)", p, __func__ , __FILE__, __LINE__ );

O código acima funciona em alguns compiladores, mas não em todos. Meu código precisa ser compatível com o GCC, bem como com os estúdios da Microsoft Visual. Eu adicionei o abaixo define para ajudar com compatibilidade.

#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__ );

O problema com o trecho de código acima é que é a macro #else está ativa em todos os compiladores enquanto as outras macros não estão. em outras palavras#if defined __func__ é falso em compiladores onde__func__ é ummacro predefinida.

Minha pergunta é

Como faço para criar uma macro cross compiler para encontrar o nome da função?Como posso saber se um__func__ pode ser usado?

questionAnswers(4)

yourAnswerToTheQuestion