New in C9X (in no particular order)
- more precise aliasing rules via effective type
- restricted pointers
- variable-length arrays
- flexible array members
- static and type qualifiers in parameter array declarators
- complex (and imaginary) support in <complex.h>
- type-generic math macros in <tgmath.h>
- the long long int type and library functions
- increased minimum translation limits
- additional floating-point characteristics in <float.h>
- remove implicit int
- reliable integer division
- universal character names (\u and \U)
- extended identifiers
- hexadecimal floating-point constants and %a and
%A printf/scanf
conversion specifiers
- compound literals
- designated initializers
- // comments
- extended integer types and library functions in
<inttypes.h> and <stdint.h>
- remove implicit function declaration
- preprocessor arithmetic done in
intmax_t/uintmax_t
- mixed declarations and code
- new block scopes for selection and iteration statements
- integer constant type rules
- integer promotion rules
- macros with a variable number of arguments
- the vscanf family of functions in
<stdio.h> and
<wchar.h>
- additional math library functions in <math.h>
- floating-point environment access in <fenv.h>
- IEC 60559 (also know as IEC 559 or IEEE arithmetic) support
- trailing comma allowed in enum declaration
- %lf conversion specifier allowed in printf
- inline functions
- the snprintf family of functions in
<stdio.h>
- boolean type in <stdbool.h>
- idempotent type qualifiers
- empty macro arguments
- new struct type compatibility rules (tag compatibility)
- additional predefined macro names
- _Prama preprocessing operator
- standard pragmas
- __func__ predefined identifier
- va_copy macro
- additional strftime conversion specifiers
- LIA compatibility annex
- deprecate ungetc at the beginning of a binary file
- remove deprecation of aliased array parameters
- conversion of array to pointer not limited to lvalues
- relaxed constraints on aggregate and union initialization
- relaxed restrictions on portable header names
- return without expression not permitted in function
that returns a value (and vice versa)
New in C93 (AM1)
- restricted character set support via digraphs and
<iso646.h>
- wide character library support in <wchar.h>
and <wctype.h>