Unterstützt der "C" -Standard etwas Ähnliches wie __func__
für die Namen der Funktionsargumente?Hat C __func__ Funktionalität für Namen der Argumente einer Funktion?
Antwort
, 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.
Hässlich, aber macht den Job :-) –
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.
Sie müssen ein bisschen auf diese ... – Stephan202
Ich denke, er bedeutet zu fragen, ob C hat ein Makro, das erweitert, um die Parameter der Funktion ist in, und die Antwort ist nein. – Blindy