几句话了解C标准之间的关系
C语言标准
- 早期的计算机汇编语言是与机器平台紧密耦合的,为了屏蔽这种耦合,增长代码的可移植性,C语言随机出现。
- 二十世纪八十年代,为了不各开发厂商用的C语言语法产生差别,由美国国家标准局为C语言制定了一套完整的国际标准语法,称为ANSI C,做为C语言最初的标准。
- 与ANSI C标准同时出现的就是ISO组织,将ANSI C加入了ISO的你们庭,定义了ISO C。除了在格式和排版等方面存在一些差异外,其余都与ANSI C相同。
- 因此一句话ANSI C与ISO C 对于咱们开发者来讲彻底相同。
-
目前出现的C标准以下:html
- 对于编程来讲,不一样的机器平台的编译器可能不一样,可是他必须按照ISO C的标准来实现,即他必须支持对于C标准的语法规则的编译。固然随着C标准的演进,编译器也是须要随之演进的,好比当前的C11标准,不是全部的编译器均支持。
- 交叉编译,就是在一个平台上经过交叉编译器,编译另个平台上运行的程序。编译器起到重要做用哦~
C标准库
- C标准库是严格按照C标准规范实现的一个C库,在Linux下有个叫libc的库就是标准库了。有些Linux下可能已经和glibc打包到一块儿了。
- 起初的C标准库存在15个头文件(后续介绍),我认为这15个头文件是咱们做为C开发者必须知道的。每一个语言的诞生都会有一些语言对应的库提供给开发者,这是一个语言可以发展起来的基础。(我的理解哈~)
POSIX C
- 提及POSIX C有人会鄙视我,说根本就没有POSIX C,对是没有POSIX C标准,可是有POSIX C库。
- 首先要理解什么事POSIX,全称:可移植操做系统接口。故名思议,因为当时Unix诞生以后,因为各个厂商都实现本身的Unix(都敢使用Unix,因为版权的问题),接口的不统一,致使在各个厂商下基于不一样的操做系统开发变得很乱,为了解决这一问题,便有了POSIX标准。
- 一句话:POSIX标准的诞生是为了统一个操做系统的接口,方便开发者开发程序,写出可移植的代码程序。基于POSIX标准的库函数都是能够在持之此标准的操做系统平台上移植的。
- 咱们说的posix c库就是基于POSIX标准定义的一套头文件实现的lib库。
- 因此说咱们man手册中常常会看到POSIX Program信息,表示是遵循POSIX标准而实现的。
展现一下ANSI C和POSIX C库的头文件哪些。以下展现的C标准库头文件是被扩展以后的标准,而不是起初的标准库了。增长了一些功能。
http://www.cnitblog.com/guopi...编程
GNU C
- GNU 是一个自由软件基金会,GNU's Not Unix.
- GNU 是为了实现自由开源目的一个基金会,它提供了不少基于POSIX标准的软件和库,好比glibc、gcc、emacs等等。
- 聊到这里就要聊聊Linux了,Linux诞生相信你们都据说过了,此处再也不提。因为Linux开发者拥护GNU理念,将Linux也就遵循了GNU标准,而且Linux的开发也使用了GNU提供的大量的库函数。
- 因此每一个Linux版本都存在glibc的库。
- Linux为了兼容性考虑在设计之初就按照POSIX标准,支持了POSIX标准。
- GNU C叫作glibc是Linux上的一个基础库,glibc C实现了POSIX C标准的库函数功能,有些POSIX标准是单独的库函数存在的
- 小插曲:因为GNU组织没有开发出很完善的操做系统内核,使用了Linux内核,因此将Linux归入进来,又因为GNU组织存在不少开源的很好的工具组件促使Linux快速成长,因此说GNU和Linux是相互成全。(我的感受仅供参考~)
C语言学习我的总结
- 想要使用C语言开发软件系统,必须了解C标准包括语法规则,其次了解C标准库清楚哪些基础库可使用,使用时再查也是能够的。
- 对于C标准库应该各个操做系统平台都支持,放心使用便可。
- 在类Unix、Linux操做系统上编程,固然要学习POSIX标准,了解POSIX提供了哪些编程接口,方便快速开发。
- 在Windows上固然也有一套编程接口,不了解不瞎哔哔了。可是:不是说windows彻底不支持POSIX标准。Windows NT-based 系统不能直接支持新版POSIX接口,仅支持初版POSIX v1:ISO/IEC9945-1:1990[1]版标准。因为仅支持初版POSIX的Windows NT-based系统不能建立符合POSIX接口标准的线程和窗体、套接字,因此微软公司提供POSIX兼容层Microsoft POSIX subsystem软件包(Windows Services for UNIX)以支持新版POSIX接口,Windows 系统还能够运行其余POSIX兼容层例如Cygwin.
- C标准不断的演进有些新增语法也是值得学习的,毕竟新增的语法和头文件更加方便咱们开发程序。
- GNU C中存在一些对于C标准的优化,若是是在Linux上开发程序,那咱们应该大胆的使用它,方便咱们程序的开发。例如关于__attribute__的机制就是GNU C的一大特点。因此关于GNU C咱们也是要好好的学习一下的。