我应该坚持哪个C标准?

我应该坚持哪个C标准?,c,standards,C,Standards,在C18、C11、C99和ANSI C中,我(目前)应该遵循哪个标准,为什么?找出哪些编译器支持哪些标准的最佳方法是什么?对于不同的编程领域,这种选择有什么不同?通常,最新标准一经发布,就会取代所有其他现有标准。因此,从理论上讲,这是任何时候都可以得到的最新版本 然而,并不是所有的编译器都是最新的,能够支持最新的标准版本——实际的答案是:无论您的环境支持哪一个最新版本,通常都是最好使用的 在C18、C11、C99和ANSI C中,我(目前)应该遵循哪个标准,为什么 一般来说,这是最新的。除非你有

在C18、C11、C99和ANSI C中,我(目前)应该遵循哪个标准,为什么?找出哪些编译器支持哪些标准的最佳方法是什么?对于不同的编程领域,这种选择有什么不同?

通常,最新标准一经发布,就会取代所有其他现有标准。因此,从理论上讲,这是任何时候都可以得到的最新版本

然而,并不是所有的编译器都是最新的,能够支持最新的标准版本——实际的答案是:无论您的环境支持哪一个最新版本,通常都是最好使用的

在C18、C11、C99和ANSI C中,我(目前)应该遵循哪个标准,为什么

一般来说,这是最新的。除非你有反对意见,否则使用最新版本

反对使用C18的一个理由是,文档似乎还没有免费提供,但C11是。嗯,自由地,自由地。至少它们在这里:请注意,这些不是最终的,但对于大多数目的来说,它们已经足够好了。感谢@Lundin和@JohnBode指出这一点

另一个论点是,在不支持较新标准的情况下,可能存在您想要支持的平台

我强烈反对ANSI,除非你别无选择。C99版本是一个很大的改进。之后,出现了一些不错的新特性,但最大的变化是C99

找出哪些编译器支持哪些标准的最佳方法是什么


谷歌。或者在文档中查找您感兴趣的编译器。但是,请注意,有些编译器可能不是100%符合某个C版本,即使他们声称是这样。

以我的经验,这通常是组织政策的问题,而不是个人偏好的问题。制定组织政策的原因往往不是技术性的,而是与支持合同和员工培训等相关的

<>如果你有幸能够完全做出自己的选择,你仍然需要考虑诸如你想要支持的平台的范围,以及编译器的当前性,这些编译器可能对你的代码之外的人有用。
如果你在这个领域有一个完全自由的手,那就想想你自己是幸运的吧) 如果你是一名专业人士,那么无论你参与什么项目,都会有(或应该有)一个人对该决定负责。
做那个人决定的事

如果你可以自由决定(因为你就是那个人,或者整个项目就是你自己),那么首先,假设你没有相反的充分理由,那么就使用最新版本(就像其他答案建议的那样)。
然后,当另一个可用时,重新杀戮;如果新版本没有相关的好处,我建议您继续使用新版本。

对于专业的多人项目,决定使用更新的编译器(由支持的新标准暗示)是有风险的。这至少使回归测试成为必要。

这些都不是免费提供的;ISO是商业标准,ISO 9899不是开放标准。然而,有些草案非常接近官方标准。在C11中,我认为唯一的区别在于草案中关于
\uuuuu STDC\u VERSION\uuuuuuu
的一些打字错误。免费提供的版本(用于C2011和C99)不是最终的“官方”版本,它们可能包含一些错误。但对于大多数目的来说,它们应该足够好,问题是“您的环境”通常不是代码必须构建的地方。这里有非常复杂的兼容性问题。