Est-ce que C ont __func__ fonctionnalité pour les noms des arguments d'une fonction?
Question
Le "C" support standard quelque chose de similaire à __func__
pour les noms des arguments de la fonction?
La solution
si vous voulez une solution rapide et sale pour ce faire des macros pré-processeur comme celui-ci ...
#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }
... et l'utiliser pour vos en-têtes et pieds de page de fonction comme celle-ci (testé avec 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()
Cela devrait fonctionner exactement comment vous voulez, mais il est laid.
Autres conseils
Non, la norme C99 a les éléments suivants:
6.10.8 noms de macros pré-définies
Les noms des macros suivantes sont définies par la mise en œuvre:
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_MB_MIGHT_NEQ_WC__
__STDC_VERSION__
__TIME__
Les noms des macros suivantes sont définies conditionnellement par la mise en œuvre:
__STDC_IEC_559__
__STDC_IEC_559_COMPLEX__
__STDC_ISO_10646__
6.4.2.2 identificateurs prédéfinis
Le
__func__
identificateur doit être implicitement déclaré par le traducteur comme si, immédiatement après l'accolade d'ouverture de chaque définition de fonction, la déclaration
static const char __func__[] = "function-name";
est apparu, où le nom de fonction est le nom de la function.63 lexicalement enfermant)
gcc ajoute des extensions , comme je l'imagine d'autres compilateurs font.