繁体   English   中英

“ANSI C”或“ANSI C ++”今天仍然意味着什么吗?

[英]Does “ANSI C” or “ANSI C++” still mean something today?

上次我检查过,说你在ANSI C编码等于说“这是符合C99标准的代码而没有别的东西”。 现在有了C11和C ++ 11,这种区别仍然存在吗? 它还有某种含义吗?

历史上,“ANSI C”用于表示“标准C”,即C89,与“K&R C”和编译器 - 编写者发明的各种预标准变体形成对比。 这就是第二版的原因。 “C编程语言”的封面上有一个大的红色“ANSI C”标记。

然后一段时间“ISO C”用于表示“新标准C”,即C99,与“ANSI C”形成对比。

这总是令人困惑的用法,因为ISO和ANSI都批准了C89和C99。 ISO批准了前者作为C90,并在ANSI版本中发布了一些布局变化,但据称具有相同的实质内容。 因此“ANSI C”始终是ISO标准,“ISO C”始终是ANSI标准。 唯一的区别是哪个机构监督标准化过程。

遵循这种用法(并可能鼓励它继续),GCC的-ansi标志等同于-std=c90 它的上下文实际上意味着“C90,加上一些不与标准冲突的GNU扩展”。

我不知道“ANSI C”指的是C99,但这并不意味着它没有被用来表示。

我不认为使用术语“ANSI C”在过去十年中帮助过任何人。 ANSI批准了C11,但开始说“啊哈!在这种情况下,ANSI C突然现在意味着C11!”就没有用了。 我们当然可以说C11是当前的ANSI C标准,但是术语“ANSI C”不能用于任何合理的期望,人们会清楚地将其理解为C11。

ISO C11和ISO C ++ 11都已被批准为新的ANSI C和C ++标准。

例如,在我的C11的ANSI副本上写道:

INCITS(国际信息技术标准委员会)作为美国国家标准通过。 ANSI批准日期:2012年5月23日

由于目前广泛使用了C标准的13个不同版本和C ++版本的“两个半”,我认为今天这样的术语比以往任何时候都没有意义。


  1. 实际上,在给定时间,只有一个“当前”C(C ++)标准,最后一个,因为它取代了以前的版本。 我在这里说的是,所有这些以前的版本仍然非常相关(通常超过最新版本)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM