This table is based on the list in the foreword to the printed standard ISO/IEC 9899:1999 (E).
Where "Library Issue" is listed in conjunction with some other status, this means that some compiler support is needed for the library support, or desirable in conjunction with it. Note that the headers required of conforming freestanding implementations (clause 4 paragraph 6) do not count as library issues.
This page describes the C99 support in GCC 3.0. Information on C99 support in mainline CVS GCC is also available.
See below the table for further notes on some issues.
Feature | Library Issue | Done | Broken | Missing |
---|---|---|---|---|
restricted character set support via digraphs and
<iso646.h> (originally specified in AMD1) |
Done | |||
wide character library support in
<wchar.h> and <wctype.h>
(originally specified in AMD1) |
Library Issue | Missing | ||
more precise aliasing rules via effective type | Done | |||
restricted pointers | Done | |||
variable-length arrays | Broken | |||
flexible array members | Done | |||
static and type qualifiersin parameter array declarators |
Missing | |||
complex (and imaginary) support in <complex.h> |
Broken | |||
type-generic math macros in <tgmath.h> |
Library Issue | Done | ||
the long long int type and library functions |
Done | |||
increased minimum translation limits | Done | |||
additional floating-point characteristics in <float.h> |
Done | |||
remove implicit int |
Done | |||
reliable integer division | Done | |||
universal character names (\u and \U ) |
Broken | |||
extended identifiers | Missing | |||
hexadecimal floating-point constants and
%a and %A
printf /scanf conversion specifiers |
Library Issue | Done | ||
compound literals | Broken | |||
designated initializers | Done | |||
// comments |
Done | |||
library functions in <inttypes.h> |
Library Issue | |||
extended integer types in <stdint.h> |
Missing | |||
remove implicit function declaration | Done | |||
preprocessor arithmetic done in intmax_t /uintmax_t |
Broken | |||
mixed declarations and code | Done | |||
new block scopes for selection and iteration statements |
Done | |||
integer constant type rules | Missing | |||
integer promotion rules | Missing | |||
macros with a variable number of arguments | Done | |||
the vscanf family of functions
in<stdio.h> and <wchar.h> |
Library Issue | Done | ||
additional math library functions in <math.h> |
Library Issue | Missing | ||
floating-point environment access in <fenv.h> |
Library Issue | |||
IEC 60559 (also known as IEC 559 or IEEE arithmetic) support |
Broken | |||
trailing comma allowed in enum declaration |
Done | |||
%lf conversion specifierallowed in printf |
Library Issue | Done | ||
inline functions | Broken | |||
the snprintf family of functions in <stdio.h> |
Library Issue | Done | ||
boolean type in <stdbool.h> |
Done | |||
idempotent type qualifiers | Done | |||
empty macro arguments | Done | |||
new struct type compatibility rules (tag compatibility) |
Done | |||
additional predefined macro names | Missing | |||
_Pragma preprocessing operator |
Done | |||
standard pragmas | Missing | |||
__func__ predefined identifier |
Done | |||
va_copy macro |
Done | |||
additional strftime conversion specifiers |
Library Issue | Done | ||
deprecate ungetc at thebeginning of a binary file |
Library Issue | |||
remove deprecation of aliased array parameters |
Done | |||
conversion of array to pointer not limited to lvalues | Missing | |||
relaxed constraints on aggregate and union initialization |
Done | |||
relaxed restrictions on portable header names | Done | |||
return without expression not permitted
infunction that returns a value (and vice versa) |
Done | |||
Feature | Library Issue | Done | Broken | Missing |
HOST_WIDEST_INT
, which may not
be the same as the target intmax_t
required by C99.__STDC_IEC_559__
or implement the associated standard
pragmas.<float.h>
(of
FLT_EVAL_METHOD
and DECIMAL_DIG
) are
included in most versions of <float.h>
, but not yet
float-c4x.h
, float-m68k.h
or
float-vax.h
. Also, some targets such as Solaris use the
system <float.h>
but do not fix it to add these
definitions.math_errhandling
; see
messages 1,
2,
3
on this subject to libc-hacker.-pedantic
warnings don't take proper
account of the standard version selected.__func__
should not take part in string
concatenation, should be a distinct array from any identical string
literal, and should have const
-qualified element type.
See PR
c/460 and testcases c99-func-[234].c
.wprintf
, wscanf
and
wcsftime
format checking support._Complex
keyword now works.inline
functions do not generate an external
definition if declared without extern
, but do if declared
with extern
, the opposite of GCC's handling of
inline
and extern inline
. This will
probably require existing glibc headers to be fixincluded.[*]
in parameter
declarations is present, the semantics are not; and in general the
implementation of VLAs has not been checked against C99 requirements.const
compound literals need
to be put in a temporary of appropriate storage duration (possibly
copied from read-only storage, depending on the literal; or placed in
writable storage, when of static storage duration). Getting this
right requires the new block scopes for selection and iteration
statements to be done first.<stdint.h>
and
<inttypes.h>
entries have been separated, but are a
single entry in C99. The foreword to C99 wrongly refers to the
VA_COPY
macro, but in the normative text (7.15.1.2) it is
va_copy
, so that correction has been made to the list.Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are also other ways to contact the FSF.
These pages are maintained by the GCC team.
For questions related to the use of GCC, please consult these web pages and the GCC manuals. If that fails, the gcc-help@gcc.gnu.org mailing list might help.Copyright (C) Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
Last modified 2006-06-21 |