Vordefinierte Makros für den Funktionsnamen __func__

Ich versuche, eine Debug-Protokollnachrichtenfunktion zu erstellen, die die Datei, die Zeile und die Funktion des Aufrufs der Protokollnachricht aufzeichnet.

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

Der obige Code funktioniert bei einigen Compilern, aber nicht bei allen. Mein Code muss sowohl mit GCC als auch mit Microsoft Visual Studios kompatibel sein. Ich habe die folgenden Definitionen hinzugefügt, um die Kompatibilität zu verbessern.

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

Das Problem mit dem obigen Code-Snippet ist, dass das Makro #else auf allen Compilern aktiv ist, während die anderen Makros dies nicht tun. mit anderen Worten#if defined __func__ ist auf Compilern wo falsch__func__ ist einvordefiniertes Makro.

Meine Frage ist

Wie erstelle ich ein Cross-Compiler-Makro, um den Funktionsnamen zu finden?Wie kann ich feststellen, ob a__func__ kann verwendet werden?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage