C no tiene __func__ funcionalidad para los nombres de los argumentos de una función?
Pregunta
¿La "C" algo de soporte estándar similar a __func__
para los nombres de los argumentos de la función?
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.