visual tutorial studio portable descargar compiler c++ visual-c++ gcc compiler-construction

tutorial - visual studio c++ descargar



Visual C++ equivalente a__FILE__,__LINE__ y__PRETTY_FUNCTION__ (7)

  1. Sí, Microsoft Visual Studio tiene __FILE__ y __LINE__ . Aquí hay más macros de MSVC .

  2. Ambos son ANSI C ++.

  3. __FUNCTION__ tiene __FUNCTION__ , que es específico de Microsoft.

El compilador GCC me da las siguientes macros:

  • __FILE__ para que pueda imprimir el nombre del archivo + directorio.
  • __LINE__ para que pueda imprimir el número de línea desde donde estoy imprimiendo.
  • __PRETTY_FUNCTION__ para que pueda imprimir el bonito nombre de la función

¿Visual C ++ tiene el equivalente de estas macros? Una pregunta secundaria es, ¿son estos estándares para los compiladores de C ++?


En VS2008, esto:

struct A { bool Test(int iDummyArg) { const char *szFile = __FILE__; int iLine = __LINE__; const char *szFunc = __FUNCTION__; // Func name const char *szFunD = __FUNCDNAME__; // Decorated const char *szFunS = __FUNCSIG__; // Signature printf("%s/n", szFile); printf("%d/n", iLine); printf("%s/n", szFunc); printf("%s/n", szFunD); printf("%s/n", szFunS); return true; } }; int wmain(int argc, TCHAR *lpszArgv[]) { A a; a.Test(10); }

imprimirá esto:

c:/source/test_projects/blah/blah.cpp 14 A::Test ?Test@A@@QAE_NH@Z bool __thiscall A::Test(int)

(El número de línea es "incorrecto" ya que realmente había algunas cosas adicionales en la parte superior de mi archivo).


Para obtener más portabilidad para obtener el nombre de la función actual, puede probar BOOST_CURRENT_FUNCTION .


Sé que __FILE__ ofrece __FILE__ y __LINE__ , las cuales son macros estándar. También ofrecen __FUNCTION__ , que creo que es lo que estás buscando,



__FILE__ y __LINE__ son estándar desde C89. __PRETTY_FUNCTION__ es un GCCismo. __func__ es un C99ism que (a diferencia de GCCisms) bien puede estar disponible en Visual C ++; no es exactamente lo mismo que __PRETTY_FUNCTION__ pero puede ser lo suficientemente cerca para sus propósitos.


__FILE__ y __LINE__ son estándar, y estoy bastante seguro de que los compiladores de Microsoft siempre los han tenido.

__PRETTY_FUNCTION__ es una característica de gcc.