Ha C hanno __func__ funzionalità per i nomi degli argomenti di una funzione?
Domanda
La "C" supporto standard qualcosa di simile a __func__
per i nomi degli argomenti della funzione?
Soluzione
se si desidera una soluzione rapida e sporca per questo rendere le macro pre-processore come questo ...
#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }
... e utilizzarlo per le intestazioni e piè di pagina di funzione come questo (testato 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()
Questo dovrebbe funzionare esattamente come si vuole, ma è brutto.
Altri suggerimenti
No, lo standard C99 ha la seguente:
6.10.8 predefiniti i nomi delle macro
I seguenti nomi di macro sono definite dall'implementazione:
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_MB_MIGHT_NEQ_WC__
__STDC_VERSION__
__TIME__
I seguenti nomi di macro sono condizionalmente definiti dall'implementazione:
__STDC_IEC_559__
__STDC_IEC_559_COMPLEX__
__STDC_ISO_10646__
6.4.2.2 identificatori predefiniti
Il
__func__
identificatore viene implicitamente dichiarato dal traduttore, come se, subito dopo la coppia di ciascuna definizione di una funzione di apertura, la dichiarazione
static const char __func__[] = "function-name";
è apparso, in cui la funzione-nome è il nome del lessicale-racchiude function.63)
gcc aggiunge un po ' estensioni , come immagino altri compilatori fanno.