由来
- 早期,程序员使用汇编语言进行编程,汇编语言与机器平台紧密耦合,为了屏蔽不同平台的差异性,增加代码的可移植性,就需要对汇编语法进行一定抽象并且制定一些标准接口,不同平台按照标准实现相同接口,这就是C语言的产生。
标准
语法标准
- ANSI C
- 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。
- ISO C
- 与ANSI C标准同时出现的就是ISO组织,将ANSI C加入了ISO的大家庭,定义了ISO C,除了在格式和排版等方面存在一些差别外,其他都与ANSI C相同,所以ANSI C与ISO C 对于我们开发者来说完全相同。
标准库
- C语言标准库是严格按照C标准实现的一个通用C接口库,最初的C标准库有15个头文件,是C程序员必须掌握的接口。
标准库版本
- 随着时间的变化,ISO组织已经推出了多个版本的C语言标准,如下:
- C89
- C99
- C11
标准的影响
- 不同的机器平台的编译器实现可能不同,但是它们必须按照ISO C的标准规范来实现,即必须支持C语言标准语法和C语言标准库,当然随着C标准的演进,编译器也是需要随之改进的,比如当前的C11标准,并不是所有的编译器均支持。
GNU C
- GNU是一个自由软件基金会,GNU’s Not Unix;GNU是为了实现自由开源目的一个基金会,它提供了很多基于POSIX标准的工具和库,比如glibc、gcc、emacs等等;由于Linux开发者拥护GNU理念,Linux也遵循了GNU标准,并且Linux的开发也使用了GNU提供的工具和库函数。
- GNU C是GNU组织在ISO C语言标准基础上进行一定扩展制定的C语言标准,GNU C标准对应的标准库是glibc,使用GNU编译器即可支持该标准。
Linux平台
- 在Linux平台上,GNU编译器是最常用的编译工具,因此GNU C是Linux程序员最需要掌握的C语言标准。
- GNU C 扩展语法
https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/#toc-Extensions-to-the-C-Language-Family