上次我检查过,说你在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.