Est-ce que C ont __func__ fonctionnalité pour les noms des arguments d'une fonction?

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

  •  05-09-2019
  •  | 
  •  

Question

Le "C" support standard quelque chose de similaire à __func__ pour les noms des arguments de la fonction?

Était-ce utile?

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.

scroll top