ANSI C 百科内容来自于: 百度百科

介绍

1983 年,美国国家标准协会(ANSI)委任一个委员会 X3J11 对 C 语言进行标准化。 经过长期艰苦的过程, 该委员会的工作于 1989 年 12 月 14 日正式被批准为ANSI X3.159-1989 并于 1990 年春天颁布。
一年左右以后, 该标准被接受为国际标准, ISO/IEC 9899:1990, 这个标准甚至在美国国内(在这里它被称作 ANSI/ISO 9899-1990 [1992])代替了早先的 X3.159。作为一个 ISO 标准, 它会以发行技术勘误和标准附录的形式不断更新。
1994年, 技术刊物 1 (TC1) 修正标准中 40 处地方, 多数都是小的修改或明确, 而标准附录 1 (NA1) 增加了大约 50 页的新材料, 多数是规定国际化支持的新库函数。1995 年, TC2 增加了一些更多的小修改。
该标准的一个重大修订,“C99”, 已经完成并于2000年的时候被接受。
该标准的数个版本,包括 C99 和原始的 ANSI 标准, 都包括了一个 ``基本原理" (Rational), 解释它的许多决定并讨论了很多细节问题,包括本文中提及的某些内容。
American National Standards Institute(ANSI——美国国家标准学会) 由公司、政府和其他成员组成的自愿组织。它们协商与标准有关的活动,审议美国国家标准,并努力提高美国在国际标准化组织中的地位。此外,ANSI使有关通信和网络方面的国际标准和美国标准得到发展。ANSI是IEC和ISO的成员之一。
ANSI的地位:ANSI是一个准国家式的标准机构,它为那些在特定领域建立标准的组织提供区域许可,如电气电子工程师协会(IEEE)。ANSI是国际标准化委员会(ISO)和国际电工委员会(IEC)5个常任理事成员之一,4个理事局成员之一,参加79%的ISO/TC的活动,参加89%的IEC/TC活动。ANSI 是泛美技术标准委员会(COPANT)和太平洋地区标准会议(PASC)的成员。

ANSI C和ISO C的历史

C 的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版也被ANSI采纳了,但名称ANSI C(而不是 ISO C)仍被广泛使用。一些软件开发者使用 ISO C,还有一些使用 Standard C

C89

1983年,美国国家标准协会(ANSI)组成了一个委员会,X3J11,为了创立 C 语言的标准。经过漫长而艰苦的过程,该标准于1989年完成,并在作为ANSI X3.159-1989 "Programming Language C"正式生效。因为这个标准是1989年发布的,所以一般简称C89标准。有些人也把C89标准叫做ANSI C,因为这个标准是美国国家标准协会(ANSI)发布的。

C90

在1990年,ANSI C89标准被国际标准化组织(ISO)和国际电工委员会(IEC)采纳为国际标准,名叫ISO/IEC 9899:1990 - Programming languages -- C,有些人简称C90标准。因此, C89C90通常指同一个标准,一般更常用C89这种说法。

C99

在2000年3月,国际标准化组织(ISO)和国际电工委员会(IEC)采纳了第二个C语言标准,名叫ISO/IEC 9899:1999 - Programming languages -- C,简称C99标准。

C11

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

主要编译器的支持

ANSI C被几乎所有广泛使用的编译器支持。而且多数C代码是在ANSI C基础上写的。任何 仅仅使用标准C并且没有任何硬件依赖假设的代码实际上能保证在任何平台上用遵循C标准的编译器编译成功。如果没有这种预防措施,多数程序只能在一种特定的平台或特定的编译器上编译,例如,使用非标准库,例如图形用户界面库,或者有关编译器或平台特定的特性例如数据类型的确切大小和字节序
选择编译
为了减轻K&R C和ANSI C标准,__STDC__("standard c")巨集可以被用来将代码分割为ANSI和K&R部分。
#if __STDC__
extern int getopt(int,char*const*,constchar*);
#else
extern int getopt();
#endif
上面最好使用"#if __STDC__"而不是"#ifdef __STDC__",因为一些实现可能会把 __STDC__设置为0来表示不遵循ANSI C。"__STDC__"能处理任何没有被巨集替换或者值为0的标示符。因而即使巨集"__STDC__"没有定义来表示不遵循ANSI C,"__STDC__"仍然能像显示的那样工作。
在上面的例子,一个原型中使用了ANSI实现兼容的函数声明,而另一个使用了过时的非原形声明。它们在C99和C90中依旧是ANSI兼容的,但并不被鼓励使用。

支持 ANSI C 的编译器

GCC
Microsoft Visual C++(C90. A few features of C99) (msvc doesn't support C99 at all. for example )
ARMRealView
$firstVoiceSent
- 来自原声例句
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定