3

Estoy buscando información sobre las librerías de C++, pero cuando las he leido veo que faltan cabeceras como windows.h. ¿Que diferencia hay entre una libreria y una cabecera?

Jogofus
  • 765
  • 3
  • 15
  • 27

4 Answers4

2

Un archivo de cabecera (que en la literatura C++ se llama header) es un archivo que contiene principalmente declaraciones de funciones, definiciones de tipos y macros. Provee la API con la que se accede a las funciones, clases y macros de una biblioteca.

Una "librería" es en realidad una biblioteca, sólo que algunas veces suele llamársele librería porque se escribe parecido a "library", en inglés, pero no dejes que te confunda; cuando alguien hablando de C++ dice "librería" se está refiriendo a una biblioteca, que es una colección de clases y funciones. Una biblioteca habitualmente está compuesta por archivos objeto (ya compilados) y de archivos "de cabecera", que son los que se "incluyen" (#include) en tus archivos .cpp y .h

Oración de ejemplo:

Para poder usar cout en tu programa, debes incluir el archivo de cabecera <iostream>, que es un archivo que forma parte de la biblioteca estándar del C++.

2

¿Que diferencia hay entre una libreria y una cabecera?

  • Una librería podría considerarse como una colección de cabeceras.
  • Una cabecera es un archivo de cabecera (header), que en C++ tiene extensión hpp1, normalmente (idealmente) tan sólo dispone de declaraciones de funciones u objetos.

En ocasiones las librerías son proporcionadas por terceros y contienen además de cabeceras, código pre-compilado en forma de dll o lib que hay que usar para enlazar (enlazado dinámico o estático, respectivamente).

Veo que faltan cabeceras como windows.h

C++ es un lenguaje compilado así que una vez generado el programa, éste no se modifica. Esto hace que no pueda adaptarse el mismo código a diferentes sistemas operativos (a diferencia de los lenguajes interpretados o los que usan máquina virtual) si no que para usarse en diferentes sistemas operativos debe compilarse con las cabeceras de dicho sistema operativo.

Normalmente los compiladores instalados en el sistema proporcionan ya las cabeceras necesarias para ello, de no ser así la instalación es incompleta, errónea o hay un fallo de configuración. Deberás revisar los detalles de tu compilador para estar seguro.


1Aunque la extensión es indiferente, puede usarse una extensión arbitraria.

PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
2

¿Que diferencia hay entre una libreria y una cabecera?

En C++ se podría integrar todo el programa en un único fichero... pero esto acarrea una serie de inconvenientes:

  • El fichero acaba siendo poco legible al estar mezcladas diferentes funcionalidades
  • Se complica demasiado la reutilización del código en nuevos proyectos
  • Es casi imposible separar la aplicación por capas
  • Cualquier cambio implica recompilar todo el código fuente (y este proceso en C++ no es especialmente rápido).

Es por estos motivos que el programa se trocea por funcionalidades o clases. Aun así, imagina que, por ejemplo en el caso de las clases, tanto la declaración como la implementación se deja en un único fichero... esta práctica mantiene ciertos inconvenientes:

  • Cualquier cambio implica recompilar todo el código fuente
  • Si la aplicación o librería va a poder ser usada por un tercero le vas a ofrecer toda la algoritmia... algo que suele ser lo más valioso de un proyecto.

Así pues lo que se suele hacer es separar las declaraciones de las implementaciones. Al hacer esta división, un cambio en la implementación (por ejemplo la corrección de un error), solo conlleva la recompilación de un fichero.

Estrictamente hablando, C++ no determina qué formato extensión debe tener cada fichero. Sin embargo, con el tiempo se han adquirido una serie de convenciones. Así:

  • Los ficheros de cabecera suelen tener la extensión .h o .hpp, siendo más recomendada la segunda (para distinguir entre cabeceras compatibles con C)
  • Los ficheros de código suelen tener la extensión .c o .cpp, siendo nuevamente la más recomendada la segunda.

Veo que faltan cabeceras como windows.h

Las páginas con documentación sobre las librerías suelen cubrir únicamente el conjunto de librerías contempladas por el estándar.

Las cabeceras propias del Sistema Operativo o de terceros no suelen estar cubiertas por estas páginas. Esta documentación suele encontrarse en la página propia de su autor. Así, por ejemplo, para investigar sobre WinAPI toca acudir a la MSDN y para investigar sobre Boost acudimos a su página web.

No tiene sentido que estas librerías estén documentadas en páginas genéricas por varios motivos:

  • Su ciclo de modificaciones es diferente al soportado por la librería estándar
  • Las librerías tienen políticas de programación / configuración / uso propias
  • Las librerías no tienen por qué estar disponibles en cualquier Sistema Operativo

Así pues siempre que te toque salirte del estándar tendrás que recurrir a fuentes de documentación alternativa para conocer la nueva arquitectura que vas a utilizar.

eferion
  • 49,291
  • 5
  • 30
  • 72
0

Durante la construcción de la aplicación, el preprocesador incluye en los fuentes los ficheros de cabecera. Posteriormente, durante la fase de enlazado, el linker incluye en el ejecutable los módulos correspondientes a las funciones y clases de librería que hayan sido utilizadas en el programa, de forma que el conjunto entra a formar parte del ejecutable.

Esa es la principal diferencia.

Con las dos se pueden implementar librerías.

Saludos,

Jorge Londoño
  • 964
  • 1
  • 5
  • 14