Cuando uso la macro/variable __FUNCTION__
para imprimir la información de depuración, parece haber una diferencia en lo que genera cuando usa el compilador de Microsoft C++ y gcc. Por ejemplo, usando el siguiente código trivial:¿Cómo imito la versión de Microsoft de __FUNCTION__ usando gcc?
class Foo
{
public:
void Bar(int a, int b, int c)
{
printf ("__FUNCTION__ = %s\n", __FUNCTION__);
}
};
int main (void)
{
Foo MyFoo;
MyFoo.Bar();
return 0;
}
Usando el compilador de Visual C++ Microsoft, consigo
__FUNCTION__ = Foo::Bar
mientras que al compilar con gcc (en este caso en el Mac), consigo
El segundo ejemplo no es ideal porque con bastante frecuencia tengo varias clases con, por ejemplo, Init()
y Uninit()
y en una salida de depuración rastreamos su virtua Es imposible saber cuál de estos ha sido llamado ya que falta el nombre de la clase. Ahora, sé que se puede utilizar el __PRETTY_FUNCTION__
en lugar de __FUNCTION__
para obtener algo así como
__PRETTY_FUNCTION__ = void Foo::Bar(int, int, int)
Lo cual está bien, pero es un poco demasiado prolijo para lo que necesito y se hace un poco larga para las funciones con una gran cantidad de parámetros .
Así que mi pregunta es (por fin), ¿hay alguna forma de que la salida parezca simplemente Foo::Bar
usando gcc, como en el ejemplo anterior?
tengo curiosidad ya que nunca he necesitado esta macro, ¿por qué lo necesita? ¿Su compilador/suite de pruebas/comprobador de memoria no le dice la línea exacta de código donde ocurre el problema? - si es para iniciar sesión, sugiero que se escriban registros que sean idénticos sin importar el compilador utilizado, ya que entonces puede escribir herramientas de coincidencia de patrones para analizar los registros. – Tom
posible duplicado de [¿Cuál es la diferencia entre __PRETTY_FUNCTION__, __FUNCTION__, __func__?] (http://stackoverflow.com/questions/4384765/whats-the-difference-between-pretty-function-function-func) –
No es un duplicado - esa pregunta no tiene nada que decir acerca de cómo obtener un estilo de Microsoft cadena fuera de GCC. –