Hat C haben __FUNC__ Funktionalität für Namen der Argumente einer Funktion?
Frage
Ist der "C" Standard-Support etwas ähnliches für die Funktionsargumente Namen __func__
?
Lösung
Wenn Sie eine schnelle und schmutzige Lösung für diese Pre-Prozessor-Makros machen so ...
#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }
... und verwenden Sie es für Ihre Funktion Kopf- und Fußzeilen wie folgt aus (getestet mit 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()
Dies sollte genau arbeiten, wie Sie wollen, aber es ist hässlich.
Andere Tipps
Nein, der C99-Standard hat die folgende:
6.10.8 Vordefinierte Makronamen
Die folgenden Makronamen werden durch die Implementierung definiert werden:
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_MB_MIGHT_NEQ_WC__
__STDC_VERSION__
__TIME__
Die folgenden Makronamen werden 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, unmittelbar nach dem Öffnen Klammer jeder Funktionsdefinition, die Deklaration
static const char __func__[] = "function-name";
erschienen, in dem Funktionsname der Name des lexikalisch einschließe function.63 ist)
gcc fügt einige Erweiterungen , wie ich andere Compiler vorstellen, zu tun.