2008-10-06 8 views
18

Ich möchte den Funktionsnamen jedes Mal ausgeben, wenn es aufgerufen wird, ich kann den Funktionsnamen einfach kopieren und einfügen, aber ich fragte mich, ob es eine Verknüpfung gab, die die Arbeit für mich erledigen würde?Wie erhält man den Funktionsnamen während einer Funktion für Debug-Strings?

Im Moment tue ich:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in) 
{ 
    qDebug("lynxThreeFile::readSlideInfoHeader"); 
} 

aber was ich will, ist etwas generic:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in) 
{ 
    qDebug(this.className() + "::" + this.functionName()); 
} 

Antwort

26

"__FUNCTION__" sowohl von MSVC und GCC unterstützt und sollten Sie die Informationen, die Sie geben brauchen.

+0

Hatte nicht erkannt, dass es su war Auf MSVC –

+0

portiert Es wurde von VC7 unterstützt. Version 6 hat "__FUNCTION__" nicht unterstützt –

5

Wenn Sie den Boost auschecken, gibt es ein Makro BOOST_CURRENT_FUNCTION, das plattformübergreifend portierbar ist. Im C99-Standard gibt es eine Compiler-Variable __func__, die den gewünschten Effekt hat. Ich glaube, dass es in den C++ 0x-Standard aufgenommen wurde. Eine angemessene Anzahl von Compilern wird dies bereits unterstützen.

13

Ich sehe von Ihrem Beispiel, dass Sie Qt verwenden. In diesem Fall verwenden Sie am besten Q_FUNC_INFO in <QGlobal>. Hier ist die Beschreibung:

erweitert sich auf einen String, der die Funktion der Makro befindet sich in beschreiben, wie Diese Saite mehr sieht speziell ist Compiler abhängig.. Mit GNU GCC ist es in der Regel die Funktion Signatur, während mit anderen Compilern die Zeilen- und Spaltennummer sein kann.

8

Wenn Sie gcc verwenden, finden Sie möglicherweise __PRETTY_FUNCTION__ mehr nach Ihren Wünschen.

4

__func__ ist c99 (was wiederum bedeutet es nicht, mit Visual Studio arbeiten könnte - aber hey, es ist Standard: o))

__FUNCTION__ Werke ziemlich überall

__PRETTY_FUNCTION__ ist gnu spezifisch und gibt den voll qualifizierten Namen mit (Namespaces?), Klassenname, Rückkehrtyp, Funktionsname, Parameterliste zurück