C no tiene __func__ funcionalidad para los nombres de los argumentos de una función?

StackOverflow https://stackoverflow.com/questions/905999

  •  05-09-2019
  •  | 
  •  

Pregunta

¿La "C" algo de soporte estándar similar a __func__ para los nombres de los argumentos de la función?

¿Fue útil?

Solución

Si desea una solución rápida y sucia para hacer esta macros pre-procesador como este ...

#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }

... y utilizarlo para sus cabeceras y pies de página de función como esta (probado con VS 2008):

#include <windows.h>

#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }

FUNCTION_HEADER( int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) )
    MessageBoxA(0, __func__, __func__, MB_OK);
    return 0;
FUNCTION_FOOTER()

Esto debería funcionar exactamente como usted quiere, pero es feo.

Otros consejos

No, el estándar C99 tiene la siguiente:

  

6.10.8 predefinidas nombres de macro

     

Los siguientes nombres de macros serán definidos por la aplicación:

__DATE__ 
__FILE__ 
__LINE__ 
__STDC__ 
__STDC_HOSTED__ 
__STDC_MB_MIGHT_NEQ_WC__ 
__STDC_VERSION__ 
__TIME__ 
  

Los siguientes nombres de macro son condicionalmente definidas por la aplicación:

__STDC_IEC_559__ 
__STDC_IEC_559_COMPLEX__ 
__STDC_ISO_10646__ 
  

6.4.2.2 identificadores predefinidos

     

El __func__ identificador se declara 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 léxico-encerrando function.63)

extensiones , como me imagino que otros compiladores hacen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top