【发布时间】:2017-05-23 00:00:36
【问题描述】:
我刚刚读到:C Wikipedia entry。据我所知,有 3 个不同版本的 C 被广泛使用:C89、C99 和 C11。我的问题是关于不同版本源代码的兼容性。 假设我要编写一个程序(在 C11 中,因为它是最新版本)并导入一个用 C89 编写的库。根据 C11 规范编译所有文件时,这两个版本能否正常协同工作?
问题 1: 新版本的 C 即 C99、C11 是旧 C 版本的超集吗?我所说的超集是指旧代码在根据较新的 C 规范编译时将无错误地编译,并且具有相同的含义。
我刚刚读到, // 在 C89 和 C99 中具有不同的含义。除了这个特性,C99 和 C11 是 C89 的超集吗?
如果问题 1 的答案是否定的,那么我还有 2 个问题。
如何将旧代码“移植”到新版本?是否有解释此程序的文件?
使用 C89 还是 C99 还是 C11 更好?
提前感谢您的帮助。
编辑:将 ISO C 更改为 C89。
【问题讨论】:
-
您一直在说 ISO C,但我认为您的意思是 ANSI C(或 C89 或 C90;所有这三个名称都指同一种语言)。 ISO C 本身并没有任何意义(重要的是要注意 C99 和 C11 都是由 ISO 语言体定义的)。
-
@Cornstalks 从技术上讲,每个 ISO C 标准都取代了其前身,而 ANSI 采用 ISO C 语言标准,因此“ANSI C”也意味着 C11。 (但大多数人不会那样使用它。)
-
github.com/mauke/poly.poly/blob/master/poly.poly 可以区分 C89 和 C99(通过各自编译不同的语义),所以 Q1 的答案是“否”。
-
(假设你在回复我)@user3528438:I said colloquially。当然 ANSI 和 ISO 官方将最新的标准指定为 C 语言的官方含义。
-
至于“ISO C”是什么意思,就是现在的版本,C11。 C99 和 C90 已被 ISO 撤销,就 ISO 而言不应使用。