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?