【问题标题】:Are C versions backwards compatible?C 版本是否向后兼容?
【发布时间】:2021-07-22 23:00:12
【问题描述】:

我是 C 的初学者,我想知道 C 版本是否向后兼容,所以我知道我是否观看了正确类型的教程。

【问题讨论】:

  • C 版本是指 C 标准修订版?它们不向后兼容。你应该学习最近的。请注意,通过看教程学习不如阅读一本好书高效。
  • 向后兼容是什么意思?代码?较新的代码可能会在较旧的编译器上出现问题
  • 它甚至不总是“向前”兼容。
  • C11 和 C17/C18 几乎是一样的,我相信大部分是有一些措辞修正
  • 不要从“旧”书籍、教程等中学习 C。“原始”C 版本非常草率,并且允许使用许多现代 C 不推荐的东西。不要从旧书/教程中养成坏习惯。现代编译器通常仍然允许使用旧的、草率的东西,但是当你在学习的过程中,你应该从一开始就做。

标签: c backwards-compatibility c11


【解决方案1】:

向后兼容? 几乎没有
前向兼容? 大部分是的

我的意思是

当 C 工作组 (WG14) 发布新标准时,大部分兼容旧标准的程序也兼容新标准。

但是,根据新标准编写的新程序不一定符合旧标准。

换句话说...您可以(大多数情况下)编写 C89 并使用任何编译器(C89、C94、C99、C11、C17、C2x)进行编译;但是,如果您编写 C17,它可能具有 C11 或更早版本中不可用的功能。

【讨论】:

    【解决方案2】:

    嗯,不,是的。但我不记得有一个流行的功能突然停止存在,通常它们只是慢慢过时或它的一些撤消,大多数人都在同一个版本上工作,大多数教程都在最新或安全的版本中为你工作,特别是如果你正在学习,我在 2-3 年的 C 硬编码中从未遇到过这个问题(除了在外国图书馆,你应该担心那些) 生病继续从维基复制意大利面 https://en.wikipedia.org/wiki/C11_%28C_standard_revision%29

    可选的边界检查接口(附件 K)仍然存在争议,尚未得到广泛实施,并且已提议在下一个标准修订版中弃用或删除它们。[20]即使是该接口的主要支持者微软也不符合该定义。 [21]此外,Annex K 没有包含更有用的 TR24731-2(动态分配函数),例如 vasprintf 和 open_memstream。 [22]少数开源实现包括 Open Watcom C/C++ 的“Safer C”库[23] 和 safeclib。

    但我会假设你是来学习 C 的,所以你不必担心这些突然的弃用

    好吧,我不得不潜入用户,因为我觉得这种问题只能来自...来自以前钻研或与 python 交互的人。 这是我不喜欢 python 的一个重要原因,因为每个其他主要版本都会有一堆函数被破坏,你必须修复所有这些,这在我几个小时的 python 中,所以我不是作为一个使用 python 工作了数周或的人说话在 python 中做过任何严肃或艰巨的项目 但是在 C 语言中没有,除非您完全了解那些晦涩的宏和预处理器,否则您应该能够使用最知名的函数来做任何事情,尤其是在学习方面,您永远不必担心有一天您的函数会特别中断重新年轻。 这是因为与 python 不同,C 库没有那么广泛,而且在我看来只有最低限度,这使得它运行得更快并且更少出现故障

    【讨论】:

    • 非常感谢:)
    • 我能想到的唯一停止存在的函数(在标准中)是gets。它在 C11 中被删除。
    【解决方案3】:

    C 标准不向后兼容 - 根据最新标准编写的代码不能保证使用仅支持早期版本的编译器构建。

    C 标准(大部分)是向前兼容的 - 在旧版本标准下编写的代码应该使用实现最新版本的编译器构建,除了多年来的一些重大更改(C99 消除了隐式 int 声明并删除了标准库中的gets 库函数)。

    负责 C 标准的委员会非常努力地确保任何更改都不会破坏现有代码,但有时这是不可能的。

    如果您刚刚学习 C,请使用您可用的最新版本进行学习。大多数 C 编译器的最新版本应该支持 C17;如果不是,他们应该至少支持 C11。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多