que - Diferencia entre C/C++ Runtime Library y C/C++ Standard Library
cppreference (7)
La biblioteca de tiempo de ejecución de C ++ contiene funciones y objetos suministrados en C ++, como cout, fstream, etc.
La biblioteca C runtime contiene funciones C como printf, scanf, fopen, etc.
¿Pueden decirme la diferencia entre ellos?
Por cierto, ¿hay algo llamado biblioteca C ++ o biblioteca C?
La biblioteca estándar de C ++ es un término para definir la biblioteca estándar que un compilador / conjunto de herramientas mínimo debe tener. La biblioteca en tiempo de ejecución de C ++ es la biblioteca incluida con el conjunto de herramientas para proporcionar la funcionalidad de biblioteca estándar, y probablemente algunas cosas internas que el compilador pueda necesitar. De hecho, esos términos son a menudo intercambiables.
La C++ Standard Library
y la biblioteca C Standard Library
son las bibliotecas que C ++ y C Standard definen que se proporcionan a los programas C ++ y C para su uso. Ese es un significado común de esas palabras, nunca he visto otra definición de eso, y C ++ lo define así:
La biblioteca estándar de C ++ proporciona un marco extensible y contiene componentes para: soporte de idiomas, diagnósticos, utilidades generales, cadenas, configuraciones regionales, contenedores, iteradores, algoritmos, números y entrada / salida. Los componentes de soporte de idioma son requeridos por ciertas partes del lenguaje C ++, tales como asignación de memoria (5.3.4, 5.3.5) y procesamiento de excepción (cláusula 15).
C++ Runtime Library
y C Runtime Library
no se utilizan de igual manera. Algunos dicen que una biblioteca de tiempo de ejecución es la parte que un programa usa en tiempo de ejecución (como el código que implementa std::type_info
o el código que soporta manejadores de señal) en lugar de cosas que solo usan en tiempo de compilación (como definiciones de macro). Otras personas dicen que una biblioteca de tiempo de ejecución es una que está vinculada a un programa en tiempo de carga de forma dinámica, en lugar de estáticamente en tiempo de compilación, aunque este uso es muy raro. biblioteca compartida o biblioteca vinculada dinámicamente son mejores términos para eso.
C++ Library
y C Library
son términos muy amplios. Solo quieren decir que una biblioteca está escrita en C ++ y / o C.
Lo anterior no solo se limita a C ++ y / o C. Hay bibliotecas de Python y también hay una Biblioteca estándar de Python.
La biblioteca estándar de C ++ consta de dos partes principales, a saber, la biblioteca de plantillas estándar (STL) y la biblioteca de tiempo de ejecución. STL se implementa únicamente en archivos de encabezado, mientras que una implementación de la biblioteca de tiempo de ejecución contiene tanto archivos de encabezado como binarios (es decir, archivos .lib y .dll en plataformas Windows).
Según https://en.wikibooks.org/wiki/C_Programming/Standard_libraries#Common_support_libraries , existe una diferencia muy importante entre la Biblioteca estándar y la Biblioteca en tiempo de ejecución. Si bien la Biblioteca estándar define funciones que (siempre) están disponibles para el programador (pero no forman parte de la especificación (inicial) del lenguaje de programación, al menos en C), la Biblioteca de tiempo de ejecución contiene funciones necesarias para ejecutar un programa en realidad. una plataforma determinada (y son específicos de la plataforma / específicos del vendedor).
Por ejemplo, printf () es parte de la Biblioteca estándar C, mientras que el inicio del programa (que en muchos casos es invisible para el programador) se implementa en la Biblioteca de tiempo de ejecución. Por ejemplo, puede escribir un programa en C que no use la biblioteca estándar, pero siempre necesita la biblioteca de tiempo de ejecución porque, de lo contrario, su programa no podría ejecutarse. Pero para ser honesto, esto sería de poca utilidad porque un programa en C sin la Biblioteca estándar no podría hacer entradas / salidas, por lo que no podría decirle algo sobre sus impresionantes resultados.
Lo que lleva a confusión con respecto a la diferencia entre esos dos es:
- En todos los casos, la Biblioteca de tiempo de ejecución es necesaria / utilizada y en (casi) todos los casos, se utiliza la Biblioteca estándar. Además, la biblioteca estándar podría depender de la biblioteca de tiempo de ejecución y probablemente la desarrolle el mismo proveedor. Por lo tanto, la distinción no es clara y en la mayoría de los casos no es necesaria.
- Microsoft ha unido la Biblioteca C Standard y la C Runtime Library y solo la llama Biblioteca de tiempo de ejecución C.
Introducción
C / C ++ Standard Library es cualquier implementación de todo el conjunto requerido de funcionalidades necesarias para lograr lo que exige el estándar ISO C / C ++. (Definición de Wikipedia de una biblioteca estándar de C ++ )
Una biblioteca en tiempo de ejecución es cualquier implementación de un conjunto de funcionalidades que generalmente se ofrecen en forma de SDK y que se requieren para ser instaladas o enlazadas estáticamente para permitir que un programa que usa ese SDK se ejecute y tenga todo lo que pueda necesitar para usar ese SDK. Por estos motivos, Runtime Library suele estar estrictamente relacionado con el SDK utilizado y la versión del compilador utilizada. (Definición de Wikipedia de una biblioteca de tiempo de ejecución genérica)
C / C ++ Runtime Library
La biblioteca de tiempo de ejecución de AC / C ++ debe contener todas las funcionalidades requeridas para ejecutar lo requerido por la biblioteca estándar (las funcionalidades exclusivas del encabezado de la implementación de la biblioteca estándar específica pueden excluirse porque se resuelven dentro del programa) más un conjunto de funcionalidades ofrecidas por el SDK de la implementación específica (nuevamente las funcionalidades ofrecidas solo como encabezado pueden ser excluidas).
El caso de Microsoft
Antes de MSVC140: Microsoft VC ++ Runtime reciente solía tener una versión instalable del C / C ++ Runtime (VCRedist), esa versión era la misma para todos los sistemas operativos.
A partir de MSVC140: a partir del próximo compilador MSVC140, la biblioteca Runtime se ha dividido en dos partes:
- UCRT (Universal C Runtime): se envía con el sistema operativo y relacionado con él, distribuido a través de actualizaciones o imágenes del sistema operativo
- VCRedist: la parte que se espera que cambie con el compilador utilizado y que es común entre las diferentes versiones de SO (administrado como antes de MSVC140).
Aquí hay un enlace a la documentación de referencia MS C Runtime . Aquí hay un enlace a la página de descarga de MS C Runtime e instrucciones de instalación .
La biblioteca estándar es un conjunto particular de encabezados y nombres definidos, tal como se define en el documento estándar de C ++, una biblioteca en tiempo de ejecución es un conjunto de elementos binarios que se utiliza como parte del programa compilado pero no se incluye en los ejecutables del programa porque es tan comúnmente necesario.
En cambio, esas piezas de funcionalidad están incluidas en el equipo host (aunque es posible que deba pedirles a sus clientes que instalen un tiempo de ejecución actualizado si tienen un service pack anterior) para que se incluyan en su programa solo en "runtime".
Árbitro. campo de golf:
http://msdn2.microsoft.com/en-us/library/cscc687y(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/59ey50w6(VS.80).aspx