clases - que es un objeto en c#
Multiplataforma definiendo#define para macros__FUNCTION__ y__func__ (4)
Debería poder usar __func__ sin ninguna macros explícita en ningún compilador que admita C99.
Compilación con gcc 4.4.2 y WinXP Visual Studio C ++ 2008
#if defined ( WIN32 )
#define __FUNCTION__ __func__
#endif
Como quiero usar la macro para mostrar el nombre de la función. He hecho lo anterior para poder realizar una plataforma cruzada y usar la misma función al compilar en Linux o Windows.
Sin embargo, cuando estoy compilando en WinXP me sale el siguiente error:
__func__ undeclared identifier
¿No puedo # definir una macro como esta?
Muchas gracias por las sugerencias,
La macro __FUNCTION__ está predefinida en el compilador MSVC. Tendrás que hacer que se vea así:
#ifndef _MSC_VER
#define __FUNCTION__ __func__
#endif
O al revés, si lo prefiere:
#ifdef _MSC_VER
#define __func__ __FUNCTION__
#endif
Parece que tienes tu #define hacia atrás. Si desea usar __func__ en ambas plataformas, y WIN32 tiene __FUNCTION__ pero no __func__ , debe hacer esto en su lugar:
#if defined ( WIN32 )
#define __func__ __FUNCTION__
#endif
Puede haber una mejor manera de saber si necesita definir __func__ o no, pero este truco rápido debería hacer el truco.
Recuerde, en los compiladores que admiten las palabras clave __FUNCTION__ y __func__ , no son macros, por lo que no puede hacer lo siguiente (ya que #ifndef __func__ no es válido):
#ifndef __func__
#define __func__ __FUNCTION__
#endif
De la especificación C99:
6.4.2.2 Identificadores predefinidos
1 El identificador
__func__será declarado implícitamente por el traductor como si, inmediatamente después de la llave de apertura de cada definición de función, la declaración
static const char __func__[] = "function-name";apareció, donde nombre-función es el nombre de la función que encierra léxicamente.
Por supuesto, puede #define esta macro. Cada instancia de FUNCTION es reemplazada por __func__ . Sin embargo, obviamente su compilador no sabe __func__ . Creo que VC sabe __FUNCTION__ , entonces
#if defined ( WIN32 )
# define __func__ __FUNCTION__
#endif
podría hacer.