Predefiniowane makra dla nazwy funkcji __func__

Próbuję zbudować funkcję komunikatu dziennika debugowania, która rejestruje plik, linię i funkcję, z której został wywołany komunikat dziennika.

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

Powyższy kod działa na niektórych kompilatorach, ale nie na wszystkich. Mój kod musi być kompatybilny krzyżowo z GCC i Microsoft Visual Studio. Dodałem poniższe definicje, aby pomóc w kompatybilności.

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

Problem z powyższym fragmentem kodu polega na tym, że makro #else jest aktywne na wszystkich kompilatorach, podczas gdy inne makra nie. innymi słowy#if defined __func__ jest fałszywe na kompilatorach gdzie__func__ jestpredefiniowane makro.

Moje pytanie brzmi

Jak utworzyć makro kompilatora krzyżowego, aby znaleźć nazwę funkcji?Jak mogę stwierdzić, czy a__func__ może być użyty?

questionAnswers(4)

yourAnswerToTheQuestion