2008-10-06 13 views
18

Chcę wyprowadzić nazwę funkcji za każdym razem, gdy jest wywoływana, mogę łatwo skopiować i wkleić nazwę funkcji, jednak zastanawiałem się, czy istnieje skrót, który wykonałby pracę dla mnie?Jak uzyskać nazwę funkcji w funkcji dla ciągów debugowania?

Obecnie robie:

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

ale czego chcę jest coś ogólna:

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

Odpowiedz

26

"__FUNCTION__" jest wspierany zarówno przez MSVC i GCC i powinien dać Ci informacje potrzeba.

+0

Nie zdał sobie sprawy, że to był su pported na MSVC –

+0

Obsługiwany z VC7. Wersja 6 nie obsługuje "__FUNCTION__" –

5

Po sprawdzeniu zwiększenia istnieje makro BOOST_CURRENT_FUNCTION, które jest przenośne na różnych platformach. W standardzie C99 występuje zmienna kompilatora __func__, która ma pożądany efekt. Uważam, że został przyjęty do standardu C++ 0x. Rozsądna liczba kompilatorów już to obsługuje.

13

Widzę na Twoim przykładzie, że używasz Qt. W takim przypadku najlepiej jest użyć Q_FUNC_INFO znalezionego w <QGlobal>. Oto opis:

Rozszerza do łańcucha, które opisują funkcję makro rezyduje w jaki ten ciąg wygląda bardziej konkretnie jest kompilator zależne.. W przypadku GNU GCC jest to zwykle , zwykle podpis funkcji, , podczas gdy z innymi kompilatorami może to być numer linii i kolumny.

8

Jeśli używasz gcc, możesz znaleźć __PRETTY_FUNCTION__ bardziej do swoich potrzeb.

4

__func__ jest c99 (który ma z kolei oznacza, że ​​nie może pracować z visual studio - ale hej, to norma: o))

__FUNCTION__ działa prawie wszędzie

__PRETTY_FUNCTION__ jest gnu specific i zwraca pełną kwalifikowaną nazwę z (namespaces?), classname, returntype, functionname, lista parametrów