C/C++——C语言标准、C语言标准库、 C标准库实现glibc, uClibc, Elibc

C语言标准

C语言作为一种常用的计算机开发语言,被用于各种领域,尤其是单片机与嵌入式的开发,在现阶段更有着无可替代的作用,我也经常会使用C语言进行各种开发,使用过程中我们经常会听说 GUN C 、ANSI C、标准C这几个术语,在了解这几个术语对应的C标准之前,我们需要先了解三个组织,分别是自由软件基金会,美国国家标准学会以及国际标准化组织。下面对其三个组织进行简单说明:

  1. 自由软件基金会:是美国的一个民间非营利组织,致力于推进自由软件,其中linux与gnu就是由这个组织在维护。
  2. 美国国家标准学会:听名字就知道这是美国用于制定自己国家标准各类标准的组织(政府组织)
  3. 国际标准化组织:作用同美国国家标准协会相似,只是这个组织的目标更远大一些,致力于制定国际标准。

其中

  1. GNU C 是软件自由基金会制定的标准,
  2. ANSI C 是由美国国家标准学会制定的标准,
  3. 而ISO C则是由国际标准化组织制定的标准,

当前是一个国际化的时代,都在追求标准,那么这个标准化肯定不能是某一个国家的标准,那么这个标准肯定要有国际标准化组织来制定,所以我们常说的标准C其实就是ISOC,下面统称为标准C

大约在90年代,美国国家标准学会与国际标准化组织相互接纳吸收对方的标准,(所以当前标准C 与ANSI C的标准其实是一样的
GNU C 主要应用于linux开发,比标准c支持更多的特性所以 标准C = ISO C = ANSI C ≠ GNU C

C语言标准演变

1.K&R C

1978年,丹尼斯•里奇(Dennis Ritchie)和布莱恩•柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程式设计师称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。K&R C主要介绍了以下特色:

  1. 结构(struct)类型
  2. 长整数(long int)类型
  3. 无符号整数(unsigned int)类型
  4. 把运算符=+和=-改为+=和-=。因为=+和=-会使得编译器不知道使用者要处理i = -10还是i =- 10,使得处理上产生混淆。
      即使在后来ANSI C标准被提出的许多年后,K&R C仍然是许多编译器的最低标准要求,许多老旧的编译仍然运行K&R C的标准。

2.ANSI C和ISO C

C 的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。ANSI C现在被几乎所有广泛使用的编译器支持。现在多数C代码是在ANSI C基础上写的。

3.C89和C90

1983年,美国国家标准协会组成了一个委员会,X3J11,为了创立 C 的一套标准。经过漫长而艰苦的过程,该标准于1989年完成,并在作为ANSI X3.159-1989 “Programming Language C”正式生效。这个版本的语言经常被称作”ANSI C”,或有时称为”C89”(为了区别C99)。 在1990年,ANSI C标准(带有一些小改动)被美国国家标准协会采纳为ISO/IEC 9899:1990。这个版本有时候称为C90或者ISO C。因此,C89和C90通常指同一种语言。

传统C语言到ANSI/ISO标准C语言的改进包括:

  1. 增加了真正的标准库
  2. 新的预处理命令与特性
  3. 函数原型允许在函数申明中指定参数类型
  4. 一些新的关键字,包括 const、volatile 与 signed 宽字符、宽字符串与字节多字符
  5. 对约定规则、声明和类型检查的许多小改动与澄清

C89/90的C语言标准作为 K&R C 的一个超集(即 K&R C 是此标准C的一个子集)。

4.C99

2000年3月,ANSI 采纳了 ISO/IEC 9899:1999 标准。这个标准通常指C99。 C99新增了一些特性,如:

  1. 支持不定长的数组,即数组长度可以在运行时决定。
  2. 变量声明不必放在语句块的开头,for 语句提倡写成 for(int i=0;i<100;++i) 的形式,即i 只在 for语句块内部有效
  3. 初始化结构的时候允许对特定的元素赋值。
  4. 允许编译器化简非常数的表达式。
  5. 取消了函数返回类型默认为 int 的规定。

但是各个公司对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的时候,微软和Borland却似乎对此不感兴趣,他们把更多的精力放在了C++上。

5.C11

在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准。这个标准通常即C11,它是C程序语言的最新标准。

C语言标准库

我们在写c语言的时候,经常要使用一些库函数。
虽然我们自己也可以进行写函数,但是,使用已经存在的函数,可以降低我们的工作量和我们代码出现问题的概率。
一般情况下,我们都会使用库函数,但是对于一些初学者而言,库函数,到底需要哪些,我们在自己的函数中,需要添加哪些库函数。有的是不是不需的。

1:基本的库函数:

stdio.h和stdlib.h还有string.h这三个库函数,基本上是所有的c语言程序中都有的库函数,这三个分别是:

  1. stdio.h:标准输入输出函数库;
  2. stdlib.h:标准文件库函数
  3. string.h:字符串处理函数库;

2:一些常用的库函数:

signal.h和float.h和math.h,time.h,ctype.h这几个库函数是最常使用的,在你公司或者编程,一般的情况下,都会使用到这几个库函数,这里主要介绍一些这些库函数的主要的功能:

  1. signal.h:使用信号量的时候,需要调用该库函数的函数;
  2. float.h:浮点型处理函数库;
  3. math.h:基本高级一点的数学处理函数库;
  4. time.h:定时器需要使用的函数处理库;
  5. ctype.h:这个是字符处理函数库;

3:一些linux的专有的函数库:

我们使用c语言编程,大多数是在linux下进行编程的。对于linux下的一些基本库,我们也需要进行了解:

sys/socket.h sys/shm.h arpa/inet.h sys/types.h netinet/in.h这几个是linux下的主要的库函数:

主要的目的是为了高级的编程,比如说是linux下的socket编程,或者进程间通信之类的信息交互。

C标准库实现 glibc,uclibc,eglibc

1.Glibc

glibc = GNU C Library,是GNU项目(GNU Project)所实现的 C语言标准库(C standard library)。目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。

2.uClibc

一个小型的C语言标准库,主要用于嵌入式。其最开始设计用于uClinux(注:uClinux不支持MMU),因此比较适用于微处理器中。对应的,此处的u意思是μ,Micro,微小的意思。
uClibc的特点:
(1)uClibc比glibc要小很多。
(2)uClibc是独立的,为了应用于嵌入式系统中,完全重新实现出来的。和glibc在源码结构和二进制上,都不兼容。

3.EGLIBC

EGLIBC = Embedded GLIBC
EGLIBC是,(后来)glibc的原创作组织FSF所(新)推出的,glibc的一种变体,目的在于将glibc用于嵌入式系统。
EGLIBC的目标是:
(1)保持源码和二进制级别的兼容于Glibc即源代码架构和ABI层面兼容
如果真正实现了这个目标,那意味着,你之前用glibc编译的程序,可以直接用eglibc替换,而不需要重新编译。这样就可以复用之前的很多的程序了。
(2)降低(内存)资源占用/消耗
(3)使更多的模块为可配置的(以实现按需裁剪不需要的模块)
(4)提高对于交叉编译(cross-compilation)和交叉测试(cross-testing)的支持

Eglibc的最主要特点就是可配置,这样对于嵌入式系统中,你所不需要的模块,比如NIS,locale等,就可以裁剪掉,不把其编译到库中,使得降低生成的库的大小了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
英文版: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、付费专栏及课程。

余额充值