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

Log in or register to write something here or to contact authors.