我应该坚持哪个C标准?

Which C standard should I stick to?

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

通常,最新标准一经发布,就会取代所有其他现有标准。所以,理论上,它是任何时候可用的最新版本。

但是,并非所有编译器都会 up-to-date 支持最新的标准修订版 - 实际答案是:通常最好使用您的环境支持的最新版本。

Out of C18, C11, C99, and ANSI C, which standard should I (currently) stick to, and why?

总的来说是最新的。除非你有反对意见,否则请使用最新的。

反对使用 C18 的一个论点是文档似乎还没有免费提供,但 C11 是。好吧,自由自在。至少它们在这里:https://port70.net/~nsz/c/ 请注意,这些不是 final 的,但对于大多数用途来说它们已经足够好了。感谢@Lundin 和@JohnBode 指出。

另一个论点是,您可能希望支持一些不支持较新标准的平台。

而且我强烈建议您不要使用 ANSI,除非您别无选择。 C99版本是一个非常大的改进。之后还有一些不错的新特性,但最大的变化是C99。

What is the best way to find out which compilers support which standards?

Google。或者查看您感兴趣的编译器的文档。但是,请注意,某些编译器可能不会 100% 兼容某个 C 版本,即使它们声称是。

根据我的经验,这通常是组织政策的问题,而不是个人偏好。组织政策的原因通常不是技术性的——它们与支持合同和员工培训以及类似的事情有关。

如果你有幸能够完全自己做出选择,你仍然需要考虑一些问题,比如你想要支持的平台范围,以及人们可以使用的编译器的当前状态除了您自己之外,谁可能需要构建您的代码。

如果你在这方面完全放手,那你就幸运了;)

如果您是一名专业人士,那么在您参与的任何项目中,都有(或应该)有一个人负责该决定。
做那个人决定的事。

如果你可以自由决定(因为你就是那个人或者因为整个项目只有你一个人),那么首先使用最新版本(就像其他答案推荐的那样),假设你碰巧没有恰恰相反的理由。
然后当另一个可用时,重新决定;如果新版本没有任何相关好处,我建议倾向于使用您开始使用的版本。
对于专业的 multi-person 项目,决定使用更新的编译器(暗示支持更新的标准)是有风险的。它至少需要进行回归测试。