C语言
C是一种通用的编程语言,广泛用于系统软件与应用软件的开发,它是由Dennis Ritchie与Ken Thompson于1969年至1973年间,为了移植与开发UNIX操作系统以B语言为基础,在贝尔实验室设计、开发出来。
ALGOL 60是计算机发展史上首批产生的高级程式语言,ALGOL 60语言基础上设计出了CPL,CPL基础上设计出BCPL,B语言便是简化BCPL后取首字母B命名而来。
由于B语言过于简单以及数据无类型的弊端,Dennis Ritchie和 Ken Thompson在B语言的基础上设计出了C语言,C语言更加精炼、也更加接近硬件。之后的UNIX操作系统便用C语言重构,并一直用C语言编写至今。
C语言标准发展历程
K&R C
1978年,Dennis Ritchie和Brian Wilson Kernighan合作出版了《The C Programming Language》的第一版。书中介绍的C语言标准被称为K&R C,是第一个C语言的标准
即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。
ANSI C (ISO C)
1989年,C语言被美国国家标准协会(ANSI)标准化,编号为ANSI X3.159-1989。这个版本又称为C89。标准化的一个目的是扩展K&R C,增加了一些新特性。
1990年,国际标准化组织(ISO)成立工作组来规定国际标准的C语言,通过对ANSI标准的少量修改,最终制定了ISO 9899:1990,又称为C90。随后,ANSI亦接受国际标准C,并不再发展新的C标准。
C99
在ANSI的标准确立后,C语言的规范在一段时间内没有大的变动。《标准修正案一》在1994年为C语言创建了一个新标准,但是只修正了一些C89标准中的细节和增加更多更广的国际字符集支持。不过,这个标准引出了1999年ISO 9899:1999的发表。它通常被称为C99。C99被ANSI于2000年3月采用。
但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣。
C11
C11是当前最新的C语言标准,代号ISO/IEC 9899:2011,这次修订新增了被主流C语言编译器(如GCC,Clang,Visual C++等)增加的内容,和引入了内存模型以更好的执行多线程。之前C99的一些被推迟的计划在C11中增加了,但是对C99仍保留向后兼容。
GCC从4.6版本开始,已经可以支持一些C11的特性,Clang则是从3.1版本开始。但多线程相关的库直到2019年还未出现稳定的实现,等于没有编译器可以完整的支持C11。
C语言标准库
libc
C标准函数库(libc)是在C语言程序设计中,所有符合标准的头文件的集合,以及常用的函数库实现程序,几乎所有的C语言程序都是由标准函数库的函数来创建的。
每一个函数的名称与特性会被写成一个电脑文件,这个文件就称为头文件,但是实际的函数实现是被分存到函数库文件里。
起初的C标准库存在15个标准头文件,C99标准增加了6个头文件,C11标准中又新增了5个头文件,至此,C标准函数库共有29个头文件。
标准函数库通常会随附在编译器上,Unix和Linux操作系统默认也会附带lic库。
POSIX C
可移植操作系统接口(POSIX)的诞生是为了统一个操作系统的接口,方便开发者开发程序,写出可移植的代码程序,POSIX C库就是基于POSIX标准定义的一套头文件实现的lib库。
POSIX这个名称是由Richard Matthew Stallman应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口的缩写,而X则表明其对Unix API的传承。
基于POSIX标准的库函数都是可以在持之此标准的操作系统平台上移植的。
POSIX标准定义的必须的头文件共有26项、XSI扩展头文件包含26项、可选头文件8项
glibc
glibc(GNU C)是Linux上的一个基础库,glibc C实现了POSIX C标准的库函数功能,而且还有些POSIX标准是单独的库函数存在的。
GNU 是为了实现自由开源目的一个基金会,它提供了很多基于POSIX标准的软件和库,比如glibc、gcc、emacs等等。
glibc最初是自由软件基金会为其GNU操作系统所写,但当前最主要的应用是配合Linux内核,成为GNU/Linux操作系统一个重要的组成部分。
参考文章
- https://zh.wikipedia.org/wiki/C语言
- https://zh.wikipedia.org/wiki/ANSI_C
- https://zh.wikipedia.org/wiki/clib
- https://zh.wikipedia.org/wiki/POSIX
- https://zh.wikipedia.org/wiki/C_POSIX_library
- http://www.cnitblog.com/guopingleee/archive/2007/08/13/31701.html
- https://www.jianshu.com/p/48e0f2ab6ea1
- https://my.oschina.net/moooofly/blog/126260
- https://segmentfault.com/a/1190000012461553