GNU99 和 C99 (Clang) 有什么区别?

发布于 2024-10-21 22:54:04 字数 67 浏览 1 评论 0原文

我看到了编译器选项 GNU99 和 C99。他们有什么区别?有详细文档吗? (Clang、Xcode、Mac OS X)

I have saw the compiler option GNU99 and C99. What's the difference of them? Any detail documentation? (Clang, Xcode, Mac OS X)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷…雨湿花 2024-10-28 22:54:04

各种标准模式之间的差异

clang 支持 -std 选项,该选项更改 clang 使用的语言模式。 C 支持的模式有 c89、gnu89、c94、c99、gnu99 以及这些模式的各种别名。如果未指定 -std 选项,clang 默认为 gnu99 模式。

所有 c* 和 gnu* 模式之间的差异:

  • c* 模式定义 __STRICT_ANSI__
  • 不带下划线前缀的特定于目标的定义(如“linux”)是在 gnu* 模式中定义的。
  • 三字母在 gnu* 模式下默认关闭;它们可以通过 -trigraphs 选项启用。
  • 解析器将“asm”和“typeof”识别为 gnu* 模式中的关键字;变体 __asm____typeof__ 在所有模式下均可识别。
  • 某些平台上的 gnu* 模式默认识别 Apple“块”扩展;可以使用 -fblocks 选项在任何模式下启用它。

更多链接

Differences between various standard modes

clang supports the -std option, which changes what language mode clang uses. The supported modes for C are c89, gnu89, c94, c99, gnu99 and various aliases for those modes. If no -std option is specified, clang defaults to gnu99 mode.

Differences between all c* and gnu* modes:

  • c* modes define __STRICT_ANSI__.
  • Target-specific defines not prefixed by underscores, like "linux", are defined in gnu* modes.
  • Trigraphs default to being off in gnu* modes; they can be enabled by the -trigraphs option.
  • The parser recognizes "asm" and "typeof" as keywords in gnu* modes; the variants __asm__ and __typeof__ are recognized in all modes.
  • The Apple "blocks" extension is recognized by default in gnu* modes on some platforms; it can be enabled in any mode with the -fblocks option.

More links

指尖微凉心微凉 2024-10-28 22:54:04

C99 是直接的 C99,GNU99 是带有 gnu 扩展的 C99。请参阅 GCC 手册页

C99 is straight C99, GNU99 is C99 with gnu extensions. See the GCC manpage.

咋地 2024-10-28 22:54:04

众所周知,C99 只是 1999 年 C 标准的版本。在 GCC 中,它没有得到完全支持。

GNU99 是 C99 的扩展,就像 GNU98 是 C98 的扩展一样。来自文档:

ISO C99 加上 GNU 扩展。当 ISO C99 在 GCC 中完全实现时,这将成为默认值。 gnu9x 这个名称已被弃用。

Clang 也支持这些扩展。

C99 is simply the version of the C standard as of 1999 as we all know it. In GCC it is not fully supported.

GNU99 is an extension to C99, just like GNU98 is an extension of C98. From the docs:

ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC, this will become the default. The name gnu9x is deprecated.

Clang supports these extensions also.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文