2010-11-14 15 views
5

Cuando compilo un programa con #include¿Dónde puedo ver el código utilizado en las bibliotecas estándar de C++?

donde puedo ver el contenido de ese archivo, y también desde ese archivo contiene declaraciones, ¿dónde puedo ver el código real utilizado en esas funciones?

¿Está abierto a todos o no está disponible para el público?

+1

No hay una implementación de la biblioteca estándar. Puede averiguar dónde están los encabezados de su implementación buscando los encabezados en su sistema. Es probable que todos estén en un solo lugar. –

+1

etiquetado * osx * por fmunshi comentario sobre la pregunta de doron. –

+1

Ok a Mac, ¿qué compilador/IDE estás usando? – pinkfloydx33

Respuesta

5

El código real está en las bibliotecas estándar específicas de la plataforma que vienen con su compilador, puede verlo mirando la fuente de implementación de la biblioteca estándar.

Aquí está la documentación (y fuente) para libstdc++ por GNU (viene con gcc): http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/index.html.

Descargar la fuente de uno de estos espejos: http://gcc.gnu.org/mirrors.html

+0

¡Gracias por ese gran enlace! Tiene exactamente lo que estaba buscando. – fmunshi

1

Si utiliza algo como Visual Studio, puede poner un punto de interrupción y luego comenzar paso a paso línea por línea y abrirá los archivos incluidos a medida que avanza. La manera más rápida en un archivo en mi opinión. De lo contrario, puede encontrar el código en algún lugar de su PC ... en el mío está en C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\ostream, por ejemplo, reemplazando ostream con iostream, sstream, etc. (tenga en cuenta que esos son nombres de archivos sin extensiones) pero también si mira el directorio que encontrará vea una gran cantidad de archivos .h y .c

1

Todos los encabezados de sistema se envían con su compilador. En los sistemas Linux, estos se pueden encontrar normalmente en /usr/include. En otras plataformas, normalmente vivirá donde instaló el compilador.

Las bibliotecas comerciales normalmente no envían el código fuente. En Linux, estos normalmente se pueden encontrar en los pacakges de origen.

+0

¿qué tal en un mac, donde puedo encontrar los paquetes fuente – fmunshi

2

Depende de qué cadena de herramientas esté utilizando, no todos los proveedores están haciendo pública su implementación. Puede echar un vistazo a la biblioteca C de GNU para principiantes: http://www.gnu.org/software/libc/

Dinkumware, la empresa detrás de la biblioteca de plantillas estándar de C++ que se utiliza en Visual Studio, por ejemplo, ofrece un producto comercial, por lo tanto, el código no está disponible para todos, realmente depende de tu licencia. Algunas versiones de Visual Studio vienen con el código fuente del tiempo de ejecución incluido.

En cuanto a la STL, también hay STLport, una implementación de código abierto STL.

De hecho, su mejor apuesta serán los proyectos de los que depende gcc/g ++.

3

En general, el archivo #included es legible, pero la biblioteca que implementa generalmente no es legible. Los archivos de inclusión en un mac están en /usr/include/C++.

El código de la biblioteca depende del compilador. Para Gnu C++ utilizado en Linux y Mac, definitivamente puede ver el código. Es posible que tengas que descargarlo. Está disponible en http://gcc.gnu.org/libstdc++/

No creo que el código de biblioteca de Windows C++ esté disponible.

+0

Estoy usando un mac, entonces dónde puedo ver el código – fmunshi

+0

fmunshi: respondió su pregunta sobre mac, modifíqueme. –

2

El C++ estándar en sí es sólo eso: un estándar. La implementación de la cual es realizada por muchos proveedores. STLport y GNU libstdC++ son de código abierto y se pueden considerar como un todo. Visual Studio se envía con la biblioteca estándar de Dinkumware C++. Es de fuente cerrada.

Sin embargo, siempre puede ver el origen de los encabezados abriendo el directorio de inclusión de su lib estándar de C++. Los archivos se nombran tal como los incluye. Gran parte de esto se implementa en encabezados de todos modos. Pero son bastante ilegibles para el ojo inexperto.

Pero cuando se trata de usar la biblioteca C++, no dependa del código fuente exacto de la misma, sino de lo que dice el estándar C++. No programe a una implementación, sino a la norma.

1

Ejecutar este comando desde la línea de comandos:

find /usr -name iostream 

que le dirá al directorio que desea.

+0

muchas gracias, funcionó! – fmunshi

Cuestiones relacionadas