2008-10-06 25 views
18

Quiero mostrar el nombre de la función cada vez que se llama, puedo copiar y pegar fácilmente el nombre de la función, sin embargo, me preguntaba si había un atajo que me hiciera el trabajo.¿Cómo obtener el nombre de la función mientras está en una función para cadenas de depuración?

En el momento que estoy haciendo:

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

pero lo que quiero es algo genérico:

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

Respuesta

26

"__FUNCTION__" está soportado por ambos MSVC y GCC y debe darle la información que necesitar.

+0

No se había dado cuenta de que era su reportado en MSVC –

+0

Fue compatible con VC7. La versión 6 no admite "__FUNCTION__" –

5

Si echa un vistazo a boost hay una macro BOOST_CURRENT_FUNCTION que es portátil en todas las plataformas. En el estándar C99 hay una variable de compilación __func__ que tiene el efecto deseado. Creo que ha sido aceptado en el estándar C++ 0x. Un número razonable de compiladores ya lo soportará.

13

Veo en su ejemplo que está usando Qt. En cuyo caso su mejor opción es usar Q_FUNC_INFO encontrado en <QGlobal>. Aquí está la descripción:

se expande a una cadena que describe la función de la macro reside en cómo se ve esta cadena más específicamente es compilador dependiente.. Con GNU GCC es típicamente la firma de función, mientras que con otros compiladores podría ser el número de línea y columna.

8

Si está utilizando gcc puede encontrar __PRETTY_FUNCTION__ más a su gusto.

4

__func__ es C99 (que hace a su vez significa que podría no funcionar con Visual Studio - pero oye, estándar: o))

__FUNCTION__ obras prácticamente en todas partes

__PRETTY_FUNCTION__ es gnu específico y devuelve el nombre completo calificado con (namespaces?), classname, returntype, functionname, lista de parámetros

Cuestiones relacionadas