C语言标准和标准库简介

C语言

C是一种通用的编程语言,广泛用于系统软件与应用软件的开发,它是由Dennis RitchieKen 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 RitchieBrian 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操作系统一个重要的组成部分。

参考文章

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)