I have saw the compiler option GNU99 and C99. What's the difference of them? Any detail documentation? (Clang, Xcode, Mac OS X)
Asked
Active
Viewed 4.6k times
62
-
1From context, I assume you are talking about gcc. For example, `icc -std=c99` and `gcc -std=c99` are very different. – user510306 Mar 16 '11 at 22:35
-
@user510306: "(**Clang**, Xcode, Mac OS X)" – mk12 Aug 08 '12 at 16:33
3 Answers
48
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

Community
- 1
- 1

Matt Joiner
- 112,946
- 110
- 377
- 526
21
C99 is straight C99, GNU99 is C99 with gnu extensions. See the GCC manpage.

Matt Joiner
- 112,946
- 110
- 377
- 526

Paul R
- 208,748
- 37
- 389
- 560
-
1@Rob: well it's both a subset and a superset really, because it lacks some C99 features apparently, but it also has GNU extensions. – Paul R Oct 10 '13 at 10:29
15
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.
-
2I found something. Is this what you want to mention? http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions – eonil Mar 15 '11 at 15:00
-
2This list is highly outdated; many of the things in the list are **not extensions** but part of the standard C language as of 12 years ago. – R.. GitHub STOP HELPING ICE Mar 15 '11 at 18:09
-
1@R.. The page from the comment of Eonil also says that some of the extensions are indeed part of the standard. Thus it is not outdated if you look at it this way. – Mar 15 '11 at 18:18
-
2It still makes the list rather useless for answering OP's question. – R.. GitHub STOP HELPING ICE Mar 15 '11 at 18:31
-
Sorry, gnu99 is a subset of c99, see http://gcc.gnu.org/c99status.html for what's currently missing. – Rob Wells Oct 10 '13 at 09:25