ANSI C、ISO C、Standard C、C89,C99 ,C11……

     最近被ANSI C、ISO C、Standard C 等等本以为是好多的C标准搞得有点晕。因此通过参照各方说法自己总结了一下。

     先说结果, 个人认为,“ANSI C标准” 和“ISO C标准”,可以认为是一样的就可以了。有些地方直接写的是支持ANSI/ISO标准C。至于Standard C,这个说法本身并不严谨,也可以认为是国际标准还没出来之前的“K&R C”。也可以认为是ANSI/ISO标准C,后面详细叙述。

     先从C语言的产生说起,C语言是由B语言发展而来的,1978年丹尼斯▪里奇(Dennis M.Ritchie)和布莱恩▪柯林汉(Brian W.Kernighan)一起出版了《C程序设计语言》(《The C Programming Language》)一书,从而使C语言成为世界上应用最广泛的高级程序设计语言,而该书也成为计算机科学界最畅销的书籍之一。当时并没有C语言标准制定,而这版的C语言也成为了当时事实上的C语言标准,也被某些C程序设计师们称为“K&R C”。同时也被某些C程序设计师们称作Standard C(标准C)。当然我认为称作“K&R C”更恰当,更利于后面分清不同叫法和版本,而所谓的“ANSI/ISO C”我想主要是为了区分“K&R C”的。

    从1983年开始,ANSI(美国国家标准学会AMERICAN NATIONAL STANDARDS INSTITUTE)任一个委员会 X3J11 对 C 语言进行标准化,历时6年,终于确立了统一的规范ANSI X3.159-1989 "Programming Language C",并与1990年春天发布。这个标准被设计师们称为ANSI C,也被称为ANSI C89或直接称C89,作为一个美国国家标准被确立了下来。这个标准扩展了K&R C,包括了一些新的特性。

    再后来,ANSI C89标准被国际标准化组织(ISO)以及国际电工委员会(IEC)采纳为国际标准,标准号是ANSI/ISO9899-1990,此标准也被称为C90,也就是我们说的ISO C,该标准是在C89的基础上稍作格式修改而来,应该说基本没改动,因此C89和C90在本质上是同一种语言标准。C90标准中具体是这么说的“revision  and redesignation  of ANSI X3.1 59-1989”。

    而C89被国际化成C90后,美国国家标准委员会也开始正式使用这个国际标准C90。后续的版本也都是跟着国际标准走了。因此,我们可以认为ANSI C和ISO C就是一个标准。因此也有人直接说是ANSI/ISO C标准。因为C90这个版本太通用了,也有人把C90称作是Standard C(标准C),用来泛指C89和C90,反正内容都一样。我国也根据ANSI/ISO9899-1990等价制定了我们的国标文件GB/T 15272-94,基本就是对ANSI/ISO9899-1990的翻译。因此这个标准很通用。ANSI C和ISO C或者有人说的ANSI/ISO C,甚至是我国的国标GB/T 15272-94,本质上都是一个标准ANSI/ISO9899-1990。所以可认为一样。如果非要细化分开,也可以认为ANSI C指ANSI X3.1 59-1989,也称为C89。而ISO C以及ANSI/ISO C都指ANSI/ISO9899-1990,也称为C90。而Standard C这个称谓很不严谨,一开始在C语言国际标准出来之前,有人用来表示“K&R C”,而后来也有人用Standard C泛指非常通用的C89和C90。再顺便说一句,在ANSI制定出美国标准后,《The C Programming Language》原作者Dennis M.Ritchie和Brian W.Kernighan根据ANSI新的标准写了《The C Programming Language》的第二版。尽管出版日期早于C89,但内容一致。也说明更新后的K&R C和C89,C90也是事实上的统一标准。说成Standard C也不为过。总之这一阶段基本上奠定了完整的C标准。而这阶段的C语言最具参考价值的标准是ANSI/ISO9899-1990,而对于我国国民来说还有GB/T 15272-94,这可是中文版的,呵呵。而最具参考价值的讲述C语言的教材便是《The C Programming Language》第二版,也有中文翻译版本。另外也有类似于谭浩强老师编写的很典型C语言教材。
    当然了,任何语言都是有发展的,C语言当然也不例外,ISO后续对C90也有了更新的版本,什么C95,C99,都是后续的更新版本,然后是C11,2011年发布的版本,全称ISO/ICE9899-201x。这是目前最新的C语言版本。
    理论上,目前绝大多数的C编译器是应该支持C11版本的C语言的,但也不见得,要根据具体的编译器及编译器版本来决定。也要看具体的应用平台是否有必要支持更高版本的C。不过绝大部分的编译器是符合C90规范的,也就是ANSI/ISO C。但符合这个规范,却不一定全部支持这个规范中所规定的内容,比如说一些编译器对不常用的C库函数没有实现等等。这个需要我们看具体的C编译器说明。当然了,也有些编译器在ANSI/ISO C标准的基础上根据实际应用还会附加些其它规定,因此除了了解通用的C语言,我们还应该了解具体的C编译器的一些特性。在应用的时候应注意。

     2018年8月2号

    小草电子原创:hixiaocao.taobao.com 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值