上次我检查时,说您使用 ANSI C 编码等于说“这是符合 C99 的代码,其中没有其他内容”。现在有了 C11 和 C++11,这种区别还存在吗?它还有某种意义吗?
3 回答
从历史上看,“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 标准。唯一的区别是哪个机构负责监督标准化过程。
按照这种用法(并可能鼓励它继续使用),-ansi
GCC 的标志相当于-std=c90
. 它实际上意味着“C90,加上一些不与标准冲突的 GNU 扩展”。
我不知道“ANSI C”指的是 C99,但这并不意味着它没有被用来表示那个意思。
我不认为在过去 10 年中使用“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 标准的1 3 个不同版本和 C++ 的“两个半”版本被广泛使用,我想说今天这样的术语比以往任何时候都没有意义。
- 实际上,在给定时间只有一个“当前”C (C++) 标准,即最后一个标准,因为它取代了以前的版本。我在这里要说的是,所有这些以前的版本仍然非常相关(通常比最新版本更重要)。