c++ - "ANSI C"或 "ANSI C++"在今天还有意义吗?

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

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

最佳答案

历史上,“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。

关于c++ - "ANSI C"或 "ANSI C++"在今天还有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14141956/

相关文章:

c++ - 如果我的模板类型首先作为 lambda 参数出现,MSVC 会引发一个奇怪的错误

C++ - 将数据插入 map 循环的 map

c# - vcruntime140.dll 与 vcruntime140d.dll

c++ - 为什么一个表达式是常量,而另一个不是?

c - 在文件末尾添加行

c++ - malloc 和 calloc 是如何以不同的签名结束的?

ruby - 对于 ruby​​ 中的深度命名空间,如何最好地管理编码风格和作用域运算符的烦恼?

c - C 变量的内存地址

c++ - 我应该使用什么标志来执行良好的 C++11 风格?

css - 样式化可放置在页面中任何位置的元素的最佳实践