C语言标准及C标准库、运行时库简介

本文介绍了C语言从C89到C17的发展历程,详细列举了各版本的主要变更,如C99引入了新的头文件和功能。同时,阐述了C标准库的不同层次,从基本的stdio.h到更高级的locale.h等。此外,还讨论了C运行时库,包括UCRT和VC/C++运行时库的不同库文件及其在Windows环境下的应用。C运行时库是与平台相关的,提供了标准库之外的平台特定功能。
摘要由CSDN通过智能技术生成

1、C语言标准:

1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(著作简称为 K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C 语 言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R C。
【C89 (ANSI C)】 随着 C 语言在多个领域的推广、应用,一些新的特性不断被各种编译器实现并添加进来。于是,建立一个新的“无歧义、于具体平台无关的 C 语言定义” 成为越来越重要的事情。1983 年,ASC X3(ANSI 属下专门负责信息技术标准化的机构,现已改名为 INCITS)成立了一个专门的技术委员会 J11(J11 是委员会编号,全称是 X3J11),负责起草关于 C 语言的标准草案。1989 年,草案被 ANSI 正式通过成为美国国家标准,被称为 C89 标准。
【C90 (ISO C)】 随后,《The C Programming Language》第二版开始出版发行,书中内容根据 ANSI C(C89)进行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 联合技术第 I 委员会第 22 分委员会第 14 工作组) 的努力下,ISO 批准了 ANSI C 成为国际标准。于是 ISO C(又称为 C90) 诞生了。除了标准文档在印刷编排上的某些细节不同外,ISO C(C90) 和 ANSI C(C89) 在技术上完全一样。
【C95(ISO C)】 之后,ISO 在 1994、1996 年 分别出版了 C90 的技术勘误文档,更正了一些印刷错误,并在1995 年通过了一份 C90 的技术补充,对 C90 进行了微小的扩充,经过扩充后的 ISO C 被称为 C95。
【C99(ISO C)】 1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于 C 语言的最新、最权威的定义了
【C11(ISO C)】 2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC) 旗下的C语言标准委员会(ISO/IEC JTC1/SC22/WG14)正式发布了C11标准
【C17(ISO C)】 是于2018年6月发布的 ISO/IEC 9899:2018 的非正式名称,也是目前(截止到2020年6月)为止最新的 C语言编程标准,被用来替代 C11 标准。C17 没有引入新的语言特性,只对 C11 进行了补充和修正。

2、C标准库头文件

C89中有15个标准头文件
C90和C89除排版上的某些细节不同,技术上相同
C95增加了3个标准头文件
C99增加了6个标准头文件
C11增加了5个标准头文件
C17无
C语言函数手册也称为C标准库。C标准库由在15个头文件中声明的函数、类型定义和宏组成,每个头文件都代表了一定范围的编程功能。有人说,C标准库可以分为 3 组,如何正确并熟练的使用它们,可以相应的可区分出 3 个层次的程序员:
合格程序员:<stdio.h>、<ctype.h>、<stdlib.h>、<string.h>
熟练程序员:<assert.h>、<limits.h>、<stddef.h>、<time.h>
优秀程序员:<float.h>、<math.h>、<error.h>、<locale.h>、<setjmp.h>、<signal.h>、<stdarg.h>

编号头文件C标准版本简介
1<assert.h>C89/C90条件编译宏,将参数与零比较
2<ctype.h>C89/C90用来确定包含于字符数据中的类型的函数
3<errno.h>C89/C90报告错误条件的宏
4<float.h>C89/C90浮点数类型的极限
5<limits.h>C89/C90基本类型的大小
6<locale.h>C89/C90本地化工具
7<math.h>C89/C90常用数学函数
8<setjmp.h>C89/C90非局部跳转
9<signal.h>C89/C90信号处理
10<stdarg.h>C89/C90可变参数
11<stddef.h>C89/C90常用宏定义
12<stdio.h>C89/C90输入/输出
13<stdlib.h>C89/C90基础工具:内存管理、程序工具、字符串转换、随机数
14<string.h>C89/C90字符串处理
15<time.h>C89/C90时间/日期工具
16<iso646.h>C95符号的替代写法
17<wchar.h>C95扩展多字节和宽字符工具
18<wctype.h>C95用来确定包含于宽字符数据中的类型的函数
19<complex.h>C99复数运算
20<fenv.h>C99浮点数环境
21<inttypes.h>C99整数类型的格式转换
22<stdbool.h>C99布尔类型
23<stdint.h>C99定宽整数类型
24<tgmath.h>C99泛型数学(包装 math.h 和 complex.h 的宏)
25<stdalign.h>C11alignas 与 alignof 便利宏
26<stdatomic.h>C11原子类型
27<stdnoreturn.h>C11noreturn 便利宏
28<threads.h>C11线程库
29<uchar.h>C11UTF-16 和 UTF-32 字符工具

3、C语言标准库

UCRT的库(通用UCRT)包含通过标准 C99 CRT 库导出的函数和全局函数。UCRT 现在是 Windows 组件,作为 Windows 10 和更高版本的一部分提供。

关联的DLL特征选项预处理器指令
libucrt.lib将 UCRT 静态链接到你的代码。/MT_MT
libucrtd.lib用于静态链接的 UCRT 调试版本。不可再发行。/MTd_DEBUG,_MT
ucrt.libucrtbase.dllUCRT 的 DLL 导入库。/MD_MT,_DLL
ucrtd.libucrtbased.dllUCRT 调试版本的 DLL 导入库。不可再发行。/MDd_DEBUG,_MT,_DLL

4、VC/C++运行时库

vcruntime/VCRT库包含 Visual C++ CRT 实现特定的代码,例如异常处理和调试支持、运行时检查和类型信息、实现的详细信息和某些扩展的库函数。

关联的DLL特征选项预处理器指令
libvcruntime.lib静态链接到你的代码。/MT_MT
libvcruntimed.lib用于静态链接调试版本。不可再发行。/MTd_DEBUG,_MT
vcruntime.libvcruntime.dllvcruntime 的 DLL 导入库。/MD_MT,_DLL
vcruntimed.libvcruntimed.dlllvcruntime 调试版本的 DLL 导入库。不可再发行。/MDd_DEBUG,_MT,_DLL

实现CRT初始化和终止的库(libmmt.lib是fortran库)

特征选项预处理器指令
libcmt.lib将本机 CRT 启动静态链接到您的代码中。/MT_MT
libcmtd.lib静态链接本机 CRT 启动的 Debug 版本。不可再分发。/MTd_DEBUG,_MT
msvcrt.lib与 DLL UCRT 和 vcruntime 一起使用的本机 CRT 启动版本。/MD_MT,_DLL
msvcrtd.lib与 DLL UCRT 和 vcruntime 一起使用的本机 CRT 启动调试版本。/MDd_DEBUG,_MT,_DLL

C++标准库文件
当您构建项目的发布版本时,默认情况下会链接基本 C 运行时库之一(libcmt.lib、msvcmrt.lib、msvcrt.lib)。如果您在代码中包含C++ 标准库头文件之一,则 C++ 标准库将在编译时由 Visual C++ 自动链接。

#include <ios>
特征选项预处理器指令
libcpmt.lib多线程,静态链接/MT_MT
msvcprt.lib多线程,动态链接(导入库msvcp.dll)/MTd_DEBUG,_MT
libcpmtd.lib多线程,静态链接/MD_MT,_DLL
msvcprtd.lib多线程,动态链接(导入库msvcpd.dll)/MDd_DEBUG,_MT,_DLL

3、C运行时库

C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念。取这个名字就是因为你的 C 程序运行时需要这些库中的函数。
随着 C 语言的流行,各个 C 编译器的生产商/个体/团体都遵循老的传统,在不同平台上都有相对应的 Standard Library,但大部分实现都是与各个平台有关的。由于各个 C 编译器对 C 的支持和理解有很多分歧和微妙的差别,所以就有了 ANSI C;ANSI C (主观意图上)详细的规定了 C 语言各个要素的具体含义和编译器实现要求,引进了新的函数声明方式,同时订立了 Standard Library 的标准形式。所以C运行时库由编译器生产商提供。至于由其他厂商/个人/团体提供的头文件和库函数,应当称为第三方 C 运行库(Third party C run-time libraries)。

4、总结

1、c标准库,是针对c语言本身来说的,与平台无关。截至c11标准,它共包含29个头文件。
2、c运行库,是和平台相关的,也就说和操作系统相关,windows系统有windows的运行库,linux有linux的运行库。c运行库, 也就是c run time library(CRT) 是c语言中的概念,运行时库一般都是用汇编直接实现的。
总结:运行时库包括标准库,同时有包含自己平台相关的一些库。

英文版:The Standard C Library 内容简介 《C标准库》集中讨论了C标准库,全面介绍了ANSI/ISOC语言标准的所有函数。书中通过引用ISOC标准的相关部分,详细讲解了每一个函数的使用方法,并通过示例描述了其实现细节,且给出了实现和测试这些函数的完整代码。此外,每章结尾附有不同难度的习题,帮助读者巩固和提高。通过此书,读者将会更好地使用C标准库,并学会如何设计和实现。 《C标准库》结构清晰,内容权威,阐述精辟,对于各层次C程序员和相关专业高校师生都是一本优秀的参考书。 编辑推荐 C标准库“圣经”,提供完整源代码,全面深入阐述函数的实现与运用。C程序员必备参考书。《C标准库》是由世界级C语言专家编写的C标准库经典著作。英文版已经重印十多次,影响了几代程序员。《C标准库》结合C标准的相关部分,精辟地讲述了每一个函数的使用方法和实现细节,这正是一个真正的C程序员所必须掌握的。更重要的是,书中给出了实现和测试这些函数的完整源代码。可以让你更深入地学习C语言。不仅如此,《C标准库》还讨论了一些即使是最有经验的C程序员通常也不熟悉的知识,比如国际化和独立于区域设置的程序的编写、与构建相关的概念和设计思想。 作者简介 作者:(美国)P.J.Plauger 译者:卢红星 徐明亮 霍建同 P.J.Plauger,世界著名的软件技术专家,曾任ISO C标准委员会主席,C/C++User's Journal主编,现任ISO C++标准委员会主席。他是C/C++标准库开发领域的大师。所开发的Dinkumware标准库应用广泛。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值