我是 C 的初学者,我想知道 C 版本是否向后兼容,所以我知道我是否观看了正确类型的教程。
答案 0 :(得分:4)
向后兼容? 基本没有
向前兼容? 大部分是
我的意思是
当 C 工作组 (WG14) 发布新标准时,大多数与先前标准兼容的程序也与新标准兼容。
但是,根据新标准编写的新程序不一定符合旧标准。</p>
换句话说……你可以(大部分)编写 C89 并使用任何编译器(C89、C94、C99、C11、C17、C2x)进行编译;但是,如果您编写 C17,它可能具有 C11 或以前版本中不可用的功能。
答案 1 :(得分: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 库没有那么广泛,在我看来,它是最低限度的,这使得它运行得更快,中断的频率更低
答案 2 :(得分:1)
C 标准不向后兼容 - 不能保证在最新标准下编写的代码使用仅支持早期版本的编译器构建。
C 标准(大部分)是向前兼容的 - 在旧版本标准下编写的代码应该使用实现最新版本的编译器构建,除了多年来的一些重大变化(C99 消除了隐式 int
声明并从标准库中删除了 gets
库函数)。
负责 C 标准的委员会非常努力地确保任何更改都不会破坏现有代码,但有时这是不可能的。
如果您刚刚学习 C,请使用您可用的最新版本进行学习。大多数 C 编译器的最新版本应该支持 C17;如果不是,他们应该至少支持 C11。