【问题标题】:Does "ANSI C" or "ANSI C++" still mean something today?“ANSI C”或“ANSI C++”今天仍然有意义吗?
【发布时间】:2012-12-17 23:53:03
【问题描述】:

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

【问题讨论】:

  • C 和 C++ 标准是 ISO 认证标准。
  • @AlokSave 好的,但 ANSI 它甚至是另一个组织 ...
  • "ANSI C" 可以有多种不同的含义。恕我直言,它唯一具有普遍公认含义的时候是与 K&R C 对比使用时。
  • @AlokSaven 自从 ANSI 自动批准什么 ISO 标准化?
  • ANSI 不会自动批准任何事情。我不确定你是如何得出结论的。我之前的评论说“标准化过程已集成”,ANSI 参与了该过程。

标签: c++ c coding-style standards ansi-c


【解决方案1】:

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

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

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

【讨论】:

  • 没有。 ANSI 参与了 ISO 标准化过程。
  • @user1849534 C11 已于 2011 年 12 月被批准为新的 ISO C 标准,ANSI 于 2012 年 5 月批准它。ISO 和 ANSI 是两个不同的组织,具有不同的目标。
  • @user1849534:ISO 是国际性的(总部位于瑞士)。 ANSI 是美国的(总部设在华盛顿)。他们现在不可能是一样的吧? ;-)
  • @user1849534 你可以说ANSI ∈ ISO 而不会完全错。
  • @user1849534:现行的ISO C标准就是现行的ANSI C标准,但不能“两边都减去C standard”就得出ISO和ANSI相同的结论;-)
【解决方案2】:

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


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

【讨论】:

  • “目前”,只有一种 ISO C 标准和一种 ISO C++ 标准。 ISO 和 - 据我所知 - ANSI 也撤回了所有其他内容。
  • @Gorpik 好吧,如果 C++03 这是一个小更新,我想 TR1 它是一个小补丁
  • 我想我现在可以将这两个组织视为同一个组织
  • @CharlesBailey:ISO 和 ANSI 可以随心所欲地退役,但这并不能改变 C++98/03 和 C89 仍然是书面代码最相关的修订版的事实,并且出于兼容性原因,您经常不得不求助于它们(或者因为编译器编写者不在乎 - VC++ 会在 C89 之后移动吗?)。此外,我还没有看到完全符合 C++11 或 C11 的编译器。因此,“当前” 4/5 标准需要牢记。
  • 我并不是在争论旧的修订很重要这一事实,但暗示旧的修订仍然是“最新的”有点误导。
【解决方案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 标准。唯一的区别是哪个机构负责监督标准化过程。

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

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

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

【讨论】:

  • 你们到底是从哪里知道这一切的? :|
  • 谢谢,所以如果我理解正确的话最好不要再使用这个词了,它只是可以有不同的含义,只会在交流中产生噪音。
猜你喜欢
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 2011-05-13
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多