Ha C hanno __func__ funzionalità per i nomi degli argomenti di una funzione?

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

  •  05-09-2019
  •  | 
  •  

Domanda

La "C" supporto standard qualcosa di simile a __func__ per i nomi degli argomenti della funzione?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top