Hat C haben __FUNC__ Funktionalität für Namen der Argumente einer Funktion?

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

  •  05-09-2019
  •  | 
  •  

Frage

Ist der "C" Standard-Support etwas ähnliches für die Funktionsargumente Namen __func__?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top