ANSI C、ISO C、Standard C联系与区别

本博客文章合集:本博客文章合集

做C语言开发的人,经常会遇到“ANSI C”、“ISO C”与“Standard C”三种术语,经常会让人傻傻分不清楚。博主之前按也是搞不清三者的关系,于是某天下定决心,一定要搞清楚三者的关系,先百度上搜下。下面是在百度百科上搜索关键字“ANSI C”得到的结果:

================================分割线===================

ANSI C_百度百科

1.C 的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。一些软件开发者使用ISO C,还有一些使用 Standard C。
2.C89
1983年,美国国家标准协会(ANSI)组成了一个委员会,X3J11,为了创立 C 语言的标准。经过漫长而艰苦的过程,该标准于1989年完成,并在作为ANSI X3.159-1989 "Programming Language C"正式生效。因为这个标准是1989年发布的,所以一般简称C89标准。有些人也把C89标准叫做ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。
3.C90
在1990年,ANSI C89标准被国际标准化组织(ISO)和国际电工委员会(IEC)采纳为国际标准,名叫ISO/IEC 9899:1990 - Programming languages -- C[2] ,有些人简称C90标准。因此,C89和C90通常指同一个标准,一般更常用C89这种说法。
4.C99
在2000年3月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第二个C语言标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。[3]
5.C11

在2011年12月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第三个C语言标准,名叫ISO/IEC 9899:2011 - Information technology -- Programming languages -- C,简称C11标准。它是C程序语言的最新标准。

================================分割线================
我来分析下这5点的含义。
从第1点来看,刚开始美国自己的标准协会ANSI给C语言定义了一套标准,我取名叫C标准1。国际标准化组织ISO看到了,眼红了,就把C标准1拿来瞧了瞧,跟ANSI说“不错,蛮牛逼的,但是有几个地方还不完善啊,这样,我来修改下”。于是ISO修改了一些地方,然后也发布了一个标准,我取名叫C标准2吧。ANSI一看,哟,老兄帮我修改了下,不错嘛,那我也接受,于是ANSI与ISO就承认这个C标准2了。但是ANSI的fans还是把C标准2念成ANSI C标准,ISO的fans就把C标准2念成ISO C标准,既不是ANSI的fans也不是ISO的fans就把C标准2念成Standard C。
从第2点来看,刚开始ANSI制定了C标准,这一制定就耗费了6年时间,终于在89年发布了,所以就叫C89标准了,也就是我取名的C标准1;
从第3点来看,在90年的时候,ISO等组织采纳了C89标准,然后做了一些修改再发布,就变成C90标准了,也就是我取名的C标准2;
从第4点来看,到了2000年,ISO可能又修改了C90标准,并且发布新标准,就叫C99标准了;
从第5点来看,到了2011年,ISO可能又修改了C99标准,并且发布新标准,就叫C11标准了。看来一般是每隔10年就会发布一个新标准啊。
有了标准,那么编写跨平台的代码就容易多了。具备跨平台的代码需要如下两个条件满足:
1.代码中没有依赖针对具体硬件的代码;
2.编译器要支持C标准;

这样在A硬件平台上写的代码,无需或者只需做极小的改动,经过编译器的编译,就可以移植到B硬件平台上了。

原文地址:https://blog.51cto.com/poopoo/2421916

时间: 2024-10-03 21:11:11

ANSI C、ISO C、Standard C联系与区别的相关文章

ANSI C与C89、C99、C11区别差异

不同版本标准差异总结(图片来源:http://www.crifan.com/summary_c_language_version_c89_amd1_c99_c11): 以下为转载: [K&R C] 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了<The C Programming Language>的第一版(按照惯例,经典著作一定有简称,该著作简称为 K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C

GNU C 、ANSI C、标准C、标准c++区别和联系

GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 GNU C标准.ANSI 美国国家标准协会,它对C做的标准ANSI C标准后来被国际标准协会接收成为 标准C 所以 ANSI C 和标准C是一个概念 总体来说现在linux也支持标准C,以后标准C可以跨平台,而GUN c 一般只在linux c下应用 18.1 ANSI C和标准C++的差别 这里的ANSI C指的是

C, ANSI C, embedded c, IKM online assessment

C programming language was developed in 1972 by Dennis Ritchie at bell laboratories of AT&T (American Telephone & Telegraph) in the U.S.A. ANSI C or C89 standard: first standardized specification for C language and was developed by American Nation

【APUE】Chapter5 Standard I/O Library

5.1 Introduction 这章介绍的standard I/O都是ISOC标准的.用这些standard I/O可以不用考虑一些buffer allocation.I/O optimal-sized的细节,增加了易用性.但是也有一些问题. 5.2 Streams and FILE Objects 1. Chapter3中提到的I/O routines的核心是file descriptor:而在standard I/O背景下,相应的概念换成了stream. 2. standard I/O可以

关于ANSI,unicode与utf-8的区别

关于ANSI,unicode与utf-8的区别 非常好的一篇文章,值得一看,特转之 关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文本(文本里包含“今天的天气非常好”这句话)分别另存为ansi.unicode.utf-8这三种编码的txt文件.然后,在该文件夹上点击右键,选择“搜索(E)…”. 搜索“天气”二字,可以搜索出ansi和unicode这两种编码的txt文件,搜索不出utf-8编码的文件. 原因: 1.中文操作系统默

malloc和free的内存到底有多大?——GNU glib库

大家应该都比较熟悉这一点:malloc分配的内存一定大于用户指定的大小!而且很多人也问过这样的问题:到底大多少?以及实际上malloc到底分配了多少? 我们知道这个大小一定在某个"神奇"地方记录着,但是就像自己的"思维"一样,你确无法感知!不过,这是错觉,只是我们习惯了只使用,而没有深入剖析源码,在这里我将揭开这个面纱,去掉其透明化! 声明:源码基于GNU glib库的2.7版本的malloc目录下相关文件 再声明:不同的C库实现方式不一定一样,这里是glib库,如

部分经典IT书籍

[系统,网路管理]1) Learning the Unix Operating System 1565923901 O'reilly/1997-4ed ***强力推荐给想入门unix的网友们!! 就只有薄薄的不到100页,在书局偶然发现....深觉其内容适合初学者 相信只要读它,一个下午就可以了解基本UNIX的操作!! 2) Unix : Visual Quickstart Guide 0201353954 A-W/1998-1ed ***强力推荐给想入门unix的网友们!! 比上面那本大了点,

Portable Operating System Interface for uni-X

https://kb.iu.edu/d/agjv Short for "Portable Operating System Interface for uni-X", POSIX is a set of standards codified by the IEEE and issued by ANSI and ISO. The goal of POSIX is to ease the task of cross-platform software development by esta

彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)[转]

最近有一些朋友常问我一些乱码的问题,和他们交流过程中,发现这个编码的相关知识还真是杂乱不堪,不少人对一些知识理解似乎也有些偏差,网上百度, google的内容,也有不少以讹传讹,根本就是错误的(例如说 unicode编码是两个字节),各种软件让你选择编码的时候,常常是很长的一个选单,让用户不知道该如何选.基于这样的问题,我就写下我的理解吧,一方面帮助一些需要帮助的人纠正认识,一方面作为自己以后备查的资料. 1. ASCII(American Standard Code for Informati