提问人:MainID 提问时间:1/8/2009 最后编辑:Paolo ForgiaMainID 更新时间:3/28/2019 访问量:21838
C/C++ 运行时库和 C/C++ 标准库之间的区别
Difference between C/C++ Runtime Library and C/C++ Standard Library
答:
C++ 标准库是一个术语,用于定义最低一致性编译器/工具集应具有的标准库。C++ 运行时库是工具集附带的库,用于提供标准库功能,以及编译器可能需要的一些内部内容。事实上,这些术语通常是可以互换的。
评论
C++ 运行时库包含 C++ 中提供的函数和对象,例如 cout、fstream 等。
C 运行时库包含 print f、scanf、fopen 等 C 函数。
评论
和 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。这是这些词的常见含义,我从未见过它的另一个定义,C++ 本身是这样定义的:C++ Standard Library
C Standard Library
C++ 标准库提供了一个可扩展的框架,并包含以下组件:语言支持、诊断、常规实用程序、字符串、区域设置、容器、迭代器、算法、数字和输入/输出。C++ 语言的某些部分需要语言支持组件,例如内存分配(5.3.4、5.3.5)和异常处理(第 15 条)。
C++ Runtime Library
并且没有那么平等地使用。有人说运行时库是程序在运行时使用的部分(例如,实现的代码或支持信号处理程序的代码),而不是它们仅在编译时使用的东西(例如宏定义)。其他人说运行时库是在加载时动态链接到程序的库,而不是在编译时静态链接到程序的库,尽管这种用法很少。共享库或动态链接库是更好的术语。C Runtime Library
std::type_info
C++ Library
并且是非常宽泛的术语。它们只是意味着库是用 C++ 和/或 C 编写的。C Library
以上不仅限于 C++ 和/或 C。有 python 库,也有 python 标准库。
评论
C++ 标准库由两个主要部分组成,即标准模板库 (STL) 和运行时库。STL 仅在头文件中实现,而运行时库的实现包含头文件和二进制文件(即 Windows 平台上的 .lib 和 .dll 文件)。
根据 https://en.wikibooks.org/wiki/C_Programming/Standard_libraries#Common_support_libraries,标准库和运行时库之间存在非常重要的区别。虽然标准库定义了程序员(始终)可用的函数(但不是编程语言(初始)规范的一部分,至少在 C 中是这样),但运行时库包含在给定平台上实际运行程序所必需的函数(并且是特定于平台/特定于供应商的)。
例如,printf() 是 C 标准库的一部分,而程序启动(在许多情况下对程序员来说是不可见的)是在运行时库中实现的。例如,您可以编写一个不使用标准库的 C 程序,但您始终需要运行时库,否则您的程序将无法执行。但老实说,这没什么用,因为没有标准库的 C 程序无法进行输入/输出,因此它无法告诉您有关其令人印象深刻的结果的信息。
导致混淆这两者之间差异的是:
- 在每种情况下,都需要/使用运行时库,并且在(几乎)所有情况下,都使用标准库。此外,标准库可能依赖于运行时库,并且很可能由同一供应商开发。因此,这种区别并不明确,在大多数情况下也没有必要。
- Microsoft 将 C 标准库和 C 运行时库放在一起,并将其称为 C 运行时库。
介绍
C/C++ 标准库是完成 ISO C/C++ 标准要求所需的所有必需功能集的任何实现。(维基百科对C++标准库的定义)
运行时库是一组功能的任何实现,这些功能通常以 SDK 的形式提供,需要安装或静态链接,以使使用该 SDK 的程序能够运行,拥有使用该 SDK 所需的一切。由于这些原因,运行时库通常与使用的 SDK 和使用的编译器版本密切相关。(维基百科对通用运行时库的定义)
C/C++ 运行时库
因此,C/C++ 运行时库必须包含执行标准库所需的所有功能(可以排除特定标准库实现的仅标头功能,因为它们在程序本身中解析)以及特定实现的 SDK 提供的一组功能(同样,可以排除仅作为标头提供的功能)。
Microsoft案例
在 MSVC140:最近的 Microsoft VC++ 运行时曾经有一个可安装的 C/C++ 运行时 (VCRedist) 版本之前,该版本对于所有操作系统都是相同的。
从 MSVC140 开始:从下一个 MSVC140 编译器开始,Runtime 库已拆分为两部分:
- UCRT(通用 C 运行时):随操作系统一起提供并与之相关,通过更新或操作系统映像分发
- VCRedist:预计会随着编译器的使用而变化的部分,并且在不同的操作系统版本中很常见(像MSVC140之前一样进行管理)。
这是指向 MS C 运行时参考文档的链接。 这是 MS C Runtime 下载页面和安装说明的链接。
标准库是一组特定的定义名称和标头,如 在 C++ 标准文档中定义,运行时库是 用作编译程序的一部分但不是的二进制内容 包含在程序可执行文件中,因为它非常普遍。
相反,这些功能包含在主机上 (尽管您可能需要要求客户安装更新的 运行时(如果他们有较旧的 Service Pack),因此它们会包含在 您的程序仅在“运行时”进行。
参考链接:
http://msdn2.microsoft.com/en-us/library/cscc687y(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/59ey50w6(VS.80).aspx
Another aspect, maybe not exactly the case of C/C++, but according to the wikipedia: Runtime library
In computer programming, a runtime library (RTL) is a set of low-level routines used by a compiler to invoke some of the behaviors of a runtime environment, by inserting calls to the runtime library into compiled executable binary.
To be concise:
Runtime library is meant to be used by the compiler and standard library is meant to be used by the programmer.
评论