6

上次我检查时,说您使用 ANSI C 编码等于说“这是符合 C99 的代码,其中没有其他内容”。现在有了 C11 和 C++11,这种区别还存在吗?它还有某种意义吗?

4

3 回答 3

15

从历史上看,“ANSI C”用于表示“标准 C”,即 C89,与“K&R C”和编译器编写者发明的各种预标准变体形成对比。这就是为什么第二版。《The C Programming Language》的封面上有一个大大的红色“ANSI C”印章。

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

这总是一个令人困惑的用法,因为 ISO 和 ANSI 都批准了 C89 和 C99。ISO 将前者批准为 C90,并在 ANSI 版本的布局上进行了一些更改,但据推测其实质内容相同。因此,“ANSI C”始终是 ISO 标准,“ISO C”始终是 ANSI 标准。唯一的区别是哪个机构负责监督标准化过程。

按照这种用法(并可能鼓励它继续使用),-ansiGCC 的标志相当于-std=c90. 它实际上意味着“C90,加上一些不与标准冲突的 GNU 扩展”。

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

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

于 2013-01-03T15:45:53.533 回答
9

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

例如,在我的 C11 ANSI 副本上,它是这样写的:

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

于 2013-01-03T15:34:56.337 回答
5

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


  1. 实际上,在给定时间只有一个“当前”C (C++) 标准,即最后一个标准,因为它取代了以前的版本。我在这里要说的是,所有这些以前的版本仍然非常相关(通常比最新版本更重要)。
于 2013-01-03T15:35:11.827 回答