C语言的两套标准 此为收费教程,尊重作者的原创,请到http://c.biancheng.net/cpp/u/jiaocheng/,缴费学习,我这边隐藏文章内容,供自己学习之用。

我们今天使用的 Windows、Mac OS、Linux 等操作系统都是由一种叫做Unix的系统演化而来。Unix 作为80年代主流的操作系统,是整个软件工业的基础,是现代操作系统的开山鼻祖,C语言就是为 Unix 而生的。

Unix和C语言的开发者是同一人,名字叫丹尼斯·里奇(Dennis MacAlistair Ritchie)

第3章 变量和数据类型 12、C语言的两套标准
C语言和Unix之父——丹尼斯·里奇

C语言的诞生

1967年,26岁的丹尼斯·里奇进入贝尔实验室开发Unix,并于1969年圣诞节前推出第一个试运行版本。这个时候的Unix是用汇编语言写的,移植性非常差,要想让Unix运行在不同型号的机器上,就得针对每个型号的机器重写一遍操作系统,这显然是一个不可能完成的任务。

为了提高通用性和开发效率,丹尼斯·里奇决定发明一种新的编程语言——C语言。紧接着,丹尼斯·里奇就用C语言改写了Unix C的编译程序,他的同事汤姆森则使用C语言重写了Unix,使它成为一种通用性强、移植简单的操作系统,从此开创了计算机编程史上的新篇章,C语言也成为了操作系统专用语言。

ANSI C标准

到了80年代,C语言越来越流行,广泛被业界使用,从大型主机到小型微机,各个厂商群雄并起,推出了多款C语言的编译器。这些编译器根据行业和厂商自己的需求,进行了各种扩展,C语言进入了春秋战国时代,逐渐演变成一个松散杂乱的大家族。

为统一C语言版本,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,来制定C语言标准。1989年C语言标准被批准,被称为ANSI X3.159-1989 "Programming Language C"。这个版本的C语言标准通常被称为ANSI C。又由于这个版本是 89 年完成制定的,因此也被称为 C89

后来 ANSI 把这个标准提交到 ISO(国际化标准组织),1990年被 ISO 采纳为国际标准,称为 ISO C。又因为这个版本是1990年发布的,因此也被称为C90

ANSI C(C89) 与 ISO C(C90)内容基本相同,主要是格式组织不一样。

因为 ANSI 与 ISO 的C标准内容基本相同,所以对于C标准,可以称为ANSI C,也可以说是ISO C,或者 ANSI / ISO C。

以后大家看到 ANSI C、ISO C、C89、C90,要知道这些标准的内容都是一样的。

目前常用的编译器(例如GCC、微软编译器等)都很好地实现了 ANSI C 标准,这是使用地最广泛的一个标准。

C99标准

在ANSI C标准确立之后,C语言的规范在很长一段时间内都没有大的变动。1995年C程序设计语言工作组对C语言进行了一些修改,增加了新的关键字,编写了新的库,取消了原有的限制,并于1999年形成新的标准——ISO/IEC 9899:1999 标准,通常被成为C99

但是这个时候的C语言编译器基本已经成熟,各个组织对C99的支持所表现出来的兴趣不同。当GCC和其它一些商业编译器支持C99的大部分特性的時候,微软和Borland却似乎对此不感兴趣,或者说没有足够的资源和动力来改进编译器,最终导致不同的编译器在部分语法上存在差异。

例如,ANSI C规定,局部变量要在函数开头定义,而C99取消了这个限制,变量可以在任意位置定义。请看下面的代码:

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main(){
    int a = 100, b = 200, c;
    c = a + b;
    float d = 23.5, e = 22.899, f;
    f = d + e;
    //输出变量
    printf("c = %d, f = %f\n", c, f);
    return 0;
}

这段代码可以在GCC下编译通过,因为它支持C99标准,而在VC/VS下会产生编译错误,因为它不支持C99标准,我们在上节《C语言变量的定义位置以及初始值》中已经给出了改进方案。

关于本教程

C99 的新增特性并不多(可以说很少),现有的教程(包括书籍、视频、大学课程等)大部分都是针对ANSI C编写。

本教程虽然基于C99标准,但绝大部分内容还是ANSI C的,我们会在C99和ANSI C有差异的语法上给出重点说明。

» 订阅本站: http://www.0523jz.com/feed