【问题标题】:Using new standards [closed]使用新标准[关闭]
【发布时间】:2014-07-25 10:05:31
【问题描述】:

之前有人告诉我(正确或错误地)我应该使用各种较旧的 C 和 C++ 标准。例如,在我今年在 C 上做的 Uni 模块中,我们必须使用 ANSI C(我相信是 C89?)。其他时候我被告知要使用 C99。 每次我被告知其中任何一个时,给出的原因是 C11 使用不安全,因为每个编译器可能不支持新功能等。(我不是这方面的专家,所以解释是很棒)。

一个标准在发布 3 年后仍未被广泛使用,这对我来说似乎很荒谬。这些人是错的还是使用 C11 和 C++11 真的是个坏主意?

【问题讨论】:

  • 在语言标准的发布和编译器作者/供应商采用它之间可能存在相当长的延迟。话虽如此,C89 要求是可笑的 - C99 可能是目前日常使用的最佳选择。
  • 您没有使用标准。您使用编译器。编译器实现了一组标准。例如,如果你四年前购买了编译器,显然它不支持 C++11。你需要知道你的编译器支持的语言标准集(或者通常是它支持的标准的最新版本;或者如果它被部分支持,哪些特性是受支持的,哪些是不支持的)。了解这些信息后,您可以选择是否要使用它。后一部分是基于意见的。

标签: c++ c c99 c11 c89


【解决方案1】:

两者都不是……遗产的祸根。

您应该使用您平台上可用的最新工具,并且与系统中的其他元素兼容。新工具允许“更好”的编程、更安全的程序、更简洁的程序等。

是的你应该使用旧工具,嗯,很简单,很多工作就是维护。其中一些将在非常旧的系统上...熟悉工具的问题将在需要进行更改时有所帮助。

您的目标受众(人员和系统)将决定使用哪些工具以及支持哪些工具。最小的公分母几乎总是获胜。

出于同样的原因,我认为这是向后兼容的主要动机。如果新工具没有破坏旧代码,那么前进的步伐就会缓和。

一般来说,最好在新的编译器中使用新的语言功能。业界有一个普遍的举措来支持更新的语言(甚至在标准最终确定之前,例如即将推出的 C++14 中的 clang 和 gcc)。

【讨论】:

    【解决方案2】:

    主要的 C 编译器供应商之一,微软,已经声明他们do not intend to support the evolving C standard;他们提供了一个 C90 编译器和their C++ compiler will compile the C subset of the current C++ standard

    如果您不需要 C 代码在 Windows 上编译,或者您可以使用非 Microsoft 编译器,那么您应该随意使用 C11。

    无论如何,由于 C++11 的 C 子集比 C90 更接近 C11,因此学习当前的 C 标准以及与当前 C++ 标准兼容的该标准的子集更有意义.

    【讨论】:

    • 显然他们在 2013 年 VS 之后改变了主意,请参阅 blogs.msdn.com/b/vcblog/archive/2013/07/19/…
    • @GrzegorzSzpetkowski C99 库是 C++11 一致性所必需的,所以他们真的别无选择:)
    • 他们也引入了对语言特性的支持,比如compound literalsdesignated initializers,我不认为它与C++11或甚至 C++14。
    • @GrzegorzSzpetkowski 据我记得当时的报道,最大的(声称的)动机是允许 VS 编译主要的跨平台开源项目(当时很多人提到了 ffmpeg) .
    猜你喜欢
    • 2018-08-29
    • 2017-07-05
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多