Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between GNU99 and C99 (Clang)?

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

like image 397
eonil Avatar asked Mar 15 '11 14:03

eonil


People also ask

What is the difference between C99 and gnu99?

C99 is straight C99, GNU99 is C99 with gnu extensions. See the GCC manpage. Show activity on this post. 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.

Is gnu99 supported in GCC?

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.

What is the difference between C11 and C99?

In 1999, the C standard went through a major revision (ISO 9899:1999). This version of the standard is called C99. From 1999-2011, this was "the C language". In 2011, the C standard was changed again (ISO 9899:2011). This version is called C11. Various new features like _Generic, _Static_assert and thread support were added to the language.

What is the difference between C89 and C99 programming languages?

ANSI C : The first C language was standardized by the body called ANSI in 1989 that's why it is called c89. C99 : with the demand from the developers requirements, in 1999-2000 further or additional keywords and features have been included in C99 (ex: inline, boolean..


1 Answers

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

  • Options controlling C dialect for GCC
  • Extensions to the C Language Family
  • Clang Language Extensions
  • Useful GCC flags for C
like image 191
Matt Joiner Avatar answered Oct 11 '22 15:10

Matt Joiner