user-0 提问: c run-time library和 c standard library这两个概念怎么联系起来？

回复:
user: user-0
content: 引用 3 楼 truexf 的回复:感谢科普！！学习了！  [quote=引用 楼主 inurlcn 的回复:]  c run-time library： http://en.wikipedia.org/wiki/C_library    c standard library： http://en.wikipedia.org/wiki/Runtime_library  如何理解C run-time library （C运行时库）  　注： 以下内容部分引自CSND中相关讨论的帖子，并结合自己的理解整理而成。仅供参考。 　　1)运行时库就是 C run-time library，是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 　　2)C 语言是所谓的“小内核”语言，就其语言本身来说很小（不多的关键字，程序流程控制，数据类型等）；所以，C 语言内核开发出来之后，Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数，并且把其中最常用的部分独立出来，形成头文件和对应的 LIBRARY，C run-time library 就是这样形成的。 　　3)随后，随着 C 语言的流行，各个 C 编译器的生产商/个体/团体都遵循老的传统，在不同平台上都有相对应的 Standard Library，但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别，所以就有了 ANSI C；ANSI C （主观意图上）详细的规定了 C 语言各个要素的具体含义和编译器实现要求，引进了新的函数声明方式，同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数，应当称为第三方 C 运行库（Third party C run-time libraries）。 　　4)C run-time library里面含有初始化代码，还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库，程序照样运行，只是不能处理复杂的数学运算，不过如果没有了C run-time库，main()就不会被调用，exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。 　　5)到了 C++ 世界里，有另外一个概念:Standard C++ Library,它包括了上面所说的 C run-time library 和 STL。包含 C run-time library 的原因很明显，C++ 是 C 的超集，没有理由再重新来一个 C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括：LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB 　　6)Windows环境下，VC提供的 C run-time library又分为动态运行时库和静态运行时库。 　　动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build) 　　静态运行时库(release版)对应的主要文件是： 　　LIBC.LIB (Single thread static library, retail version) 　　LIBCMT.LIB (Multithread static library, retail version) 　　msvcrt.dll提供几千个C函数，即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时，很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时，VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件(libc.lib,libcmt.lib或Import library msvcrt.lib)链接进来。 　　编译时到底哪个C run-time library联入你的程序取决于编译选项： 　　/MD, /ML, /MT, /LD (Use Run-Time Library) 　　你可以VC中通过以下方法设置选择哪个C run-time library联入你的程序： 　　To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box. 　　从程序可移植性考虑,如果两函数都可完成一种功能，选运行时库函数好,因为各个 C 编译器的生产商对标准C Run-time library提供了统一的支持.(王朝网络 wangchao.net.cn)[/quote]

user: user-1
content: LZ贴出来的东西讲的很全面了  如果简化点想，那么就是标准库是所有标准C实现都有的一个函数集合，而CRT是其一个超集，除了标准库的实现外，还有一些和实现平台相关的东西（即多一些函数）

user: user-2
content: 感谢科普！！学习了！  引用 楼主 inurlcn 的回复:c run-time library： http://en.wikipedia.org/wiki/C_library    c standard library： http://en.wikipedia.org/wiki/Runtime_library  如何理解C run-time library （C运行时库）  　注： 以下内容部分引自CSND中相关讨论的帖子，并结合自己的理解整理而成。仅供参考。 　　1)运行时库就是 C run-time library，是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 　　2)C 语言是所谓的“小内核”语言，就其语言本身来说很小（不多的关键字，程序流程控制，数据类型等）；所以，C 语言内核开发出来之后，Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数，并且把其中最常用的部分独立出来，形成头文件和对应的 LIBRARY，C run-time library 就是这样形成的。 　　3)随后，随着 C 语言的流行，各个 C 编译器的生产商/个体/团体都遵循老的传统，在不同平台上都有相对应的 Standard Library，但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别，所以就有了 ANSI C；ANSI C （主观意图上）详细的规定了 C 语言各个要素的具体含义和编译器实现要求，引进了新的函数声明方式，同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数，应当称为第三方 C 运行库（Third party C run-time libraries）。 　　4)C run-time library里面含有初始化代码，还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库，程序照样运行，只是不能处理复杂的数学运算，不过如果没有了C run-time库，main()就不会被调用，exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。 　　5)到了 C++ 世界里，有另外一个概念:Standard C++ Library,它包括了上面所说的 C run-time library 和 STL。包含 C run-time library 的原因很明显，C++ 是 C 的超集，没有理由再重新来一个 C++ run-time library. VC针对C++ 加入的Standard C++ Library主要包括：LIBCP.LIB, LIBCPMT.LIB和 MSVCPRT.LIB 　　6)Windows环境下，VC提供的 C run-time library又分为动态运行时库和静态运行时库。 　　动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB(MSVCRTD.LIB for debug build) 　　静态运行时库(release版)对应的主要文件是： 　　LIBC.LIB (Single thread static library, retail version) 　　LIBCMT.LIB (Multithread static library, retail version) 　　msvcrt.dll提供几千个C函数，即使是像printf这么低级的函数都在msvcrt.dll里。其实你的程序运行时，很大一部分时间时在这些运行库里运行。在你的程序(release版)被编译时，VC会根据你的编译选项(单线程、多线程或DLL)自动将相应的运行时库文件(libc.lib,libcmt.lib或Import library msvcrt.lib)链接进来。 　　编译时到底哪个C run-time library联入你的程序取决于编译选项： 　　/MD, /ML, /MT, /LD (Use Run-Time Library) 　　你可以VC中通过以下方法设置选择哪个C run-time library联入你的程序： 　　To find these options in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Code Generation in the Category box. See the Use Run-Time Library drop-down box. 　　从程序可移植性考虑,如果两函数都可完成一种功能，选运行时库函数好,因为各个 C 编译器的生产商对标准C Run-time library提供了统一的支持.(王朝网络 wangchao.net.cn)

user: user-3
content: mark一下 前段时间遇到过这类问题 还好解决了！！！

user: user-4
content: C标准库只是一个概念，表示C语言编译器应当提供的那些API。 C运行时库是实际提供的标准库，通常是一个动态模块（dll或者so文件）。