2009-05-25 5 views

Antwort

3

, wenn Sie eine schnelle und schmutzige Lösung für dieses Make-Präprozessor-Makros wie diese wollen ...

#define FUNCTION_HEADER(a) a { const char* __func__ = #a; 
#define FUNCTION_FOOTER() } 

... und es für Ihre Funktion Kopf- und Fußzeilen wie diese mit VS 2008 verwenden (getestet):

#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() 

Dies sollte genau funktionieren, wie Sie wollen, aber es ist hässlich.

+0

Hässlich, aber macht den Job :-) –

5

Nein, der C99-Standard hat die folgenden:

6.10.8 Vordefinierte Makronamen

Die folgenden Makronamen wird durch die Implementierung definiert werden:

__DATE__ 
__FILE__ 
__LINE__ 
__STDC__ 
__STDC_HOSTED__ 
__STDC_MB_MIGHT_NEQ_WC__ 
__STDC_VERSION__ 
__TIME__ 

Die folgenden Makronamen sind durch die Implementierung bedingt definiert:

__STDC_IEC_559__ 
__STDC_IEC_559_COMPLEX__ 
__STDC_ISO_10646__ 

6.4.2.2 Vordefinierte Bezeichner

Die Kennung __func__ wird implizit durch den Übersetzer erklärt werden, als ob sofort die öffnende Klammer jeder Funktionsdefinition folgende, die Deklaration

 static const char __func__[] = "function-name"; 

erschien, wo Funktion-Name ist der Name der lexikalisch-enc Funktion zu verlieren.63)

gcc fügt einige extensions hinzu, wie ich mir andere Compiler vorstellen.

Verwandte Themen