C99 is the revised
ANSI/
ISO C standard, finalized in 1999. It is specified in the
ISO/IEC 9899:1999 ISO document.
C99 has quite a few changes from the previous C standard. It has adopted quite a few useful "de facto" standard C extensions, such as // comments, further specified some ambiguous behavior, like the truncation of integer division towards zero, and generally fixed up legacy cruft, like the minimum of 6 case-insensitive significant initial characters for external identifiers (C99 uses at least 31 case sensitive characters).
Some other changes:
- the __STDC_VERSION__ macro now has the value 199901L
- macros can have a variable number of arguments using ellipsis notation
- restrict and inline are reserved words; they both give the compiler optimization hints (that the compiler is free to ignore)
- digraph tokens now supplement trigraphs
- declarations in for loops (like for(int i = 0; i < j; i++) ) have scope of the loop
- compound literal initialization and named notation for initializing members (e.g. struct {int a, b, c, d;} s = { .a = 1, .c = 3, 4, .b = 5}; )
- \u (16-bit) and \U (32-bit) escape codes for Unicode characters
- the long long int type, with the LL or ll suffix for literals, plus library functions like atoll for conversion
- <stdbool.h> header file defines type bool and true/false macros
- <iso646.h> header file for macros useful when using the restricted ISO-646 character set
- <inttypes.h> header file for n-bit integer typedefs
- <complex.h> and <tgmath.h> header files for complex number support
- <wctype.h> header file for handling wide character types