Est-ce que la norme "C" supporte quelque chose de similaire à __func__
pour les noms des arguments de fonction?Est-ce que C a __func__ fonctionnalité pour les noms des arguments d'une fonction?
Répondre
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 comme vous le souhaitez, mais c'est moche.
Ugly en effet, mais fait le travail :-) –
Non, la norme C99 a les éléments suivants:
6.10.8 noms macro
pré-définiesLes noms de macro suivant est définie par la mise en œuvre:
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_MB_MIGHT_NEQ_WC__
__STDC_VERSION__
__TIME__
Les noms de macro suivants sont conditionnellement définis par l'implémentation:
__STDC_IEC_559__
__STDC_IEC_559_COMPLEX__
__STDC_ISO_10646__
6.4.2.2 identifiants prédéfinis
L'identifiant
__func__
est déclaré implicitement 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ù nom-fonction est le nom du dictionnaire lexical-enc gcc ajoute extensions, comme j'imagine d'autres compilateurs.
Vous devrez élaborer un peu sur ce ... – Stephan202
Je pense qu'il veut dire si C a une macro qui se développe aux paramètres de la fonction son, et la réponse est non. – Blindy