gpt4 book ai didi

c - 改变 objective-c 标准有什么用吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:13 24 4
gpt4 key购买 nike

我对使用 C11 编译器编译有效 C99 代码的效果很感兴趣。有什么实际区别吗?

举个例子,可以改变

gcc -c -pedantic -std=c99 source.c

gcc -c -pedantic -std=c11 source.c

实现任何目标,其中 source.c 是有效的 C99?这会引入回归,还是免费提供优化?

我对 gcc 特别感兴趣,尽管最欢迎针对其他编译器的回答。


我使用了 C11 Wikipedia page快速查看 C99 和 C11 之间的区别。

我确实注意到 C11 中删除了 gets,因此这是一种可能的回归。我唯一能看到的另一个是代码是否做了一些像版本检测这样的事情,它不是面向 future 的,比如 #if __STDC_VERSION__ == 199901L

最佳答案

对于维护 C 标准的委员会来说,向后兼容性被认为非常重要。

您可以预期,根据先前标准编写的严格符合的程序在使用新标准的设置编译时将具有相同的功能,除非

  • 该程序使用了一个已删除的功能(获取,从 C99 移动到 C11 时)
  • 程序使用了一个可选的特性,编译器没有提供(例如复杂类型或 VLA)

后者不太可能真正打动你,因为预计具有这些功能的编译器不会删除它们,因为它们是可选的。更有可能的是,如果 C11 模式下的编译器不支持 VLA,那么它在 C99 模式下也不支持(并且在这方面将不符合 C99)。

对于不严格符合的程序(大多数实际程序),您还必须检查新添加的内容是否会干扰您的代码。需要注意的事项是:

  • 与您自己的 header 同名的新标准 header
  • 错误使用了在新标准中使用的保留标识符。特别是以下划线和大写字母开头的标识符

关于c - 改变 objective-c 标准有什么用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23235423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com