2002-05-09 20:02:13 +00:00
|
|
|
@c Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
2002-02-01 18:16:02 +00:00
|
|
|
@c This is part of the GCC manual.
|
|
|
|
@c For copying conditions, see the file gcc.texi.
|
|
|
|
|
|
|
|
@node Standards
|
|
|
|
@chapter Language Standards Supported by GCC
|
|
|
|
@cindex C standard
|
|
|
|
@cindex C standards
|
|
|
|
@cindex ANSI C standard
|
|
|
|
@cindex ANSI C
|
|
|
|
@cindex ANSI C89
|
|
|
|
@cindex C89
|
|
|
|
@cindex ANSI X3.159-1989
|
|
|
|
@cindex X3.159-1989
|
|
|
|
@cindex ISO C standard
|
|
|
|
@cindex ISO C
|
|
|
|
@cindex ISO C89
|
|
|
|
@cindex ISO C90
|
|
|
|
@cindex ISO/IEC 9899
|
|
|
|
@cindex ISO 9899
|
|
|
|
@cindex C90
|
|
|
|
@cindex ISO C94
|
|
|
|
@cindex C94
|
|
|
|
@cindex ISO C95
|
|
|
|
@cindex C95
|
|
|
|
@cindex ISO C99
|
|
|
|
@cindex C99
|
|
|
|
@cindex ISO C9X
|
|
|
|
@cindex C9X
|
|
|
|
@cindex Technical Corrigenda
|
|
|
|
@cindex TC1
|
|
|
|
@cindex Technical Corrigendum 1
|
|
|
|
@cindex TC2
|
|
|
|
@cindex Technical Corrigendum 2
|
|
|
|
@cindex AMD1
|
|
|
|
@cindex freestanding implementation
|
|
|
|
@cindex freestanding environment
|
|
|
|
@cindex hosted implementation
|
|
|
|
@cindex hosted environment
|
|
|
|
@findex __STDC_HOSTED__
|
|
|
|
|
|
|
|
For each language compiled by GCC for which there is a standard, GCC
|
|
|
|
attempts to follow one or more versions of that standard, possibly
|
|
|
|
with some exceptions, and possibly with some extensions.
|
|
|
|
|
|
|
|
GCC supports three versions of the C standard, although support for
|
|
|
|
the most recent version is not yet complete.
|
|
|
|
|
|
|
|
@opindex std
|
|
|
|
@opindex ansi
|
|
|
|
@opindex pedantic
|
|
|
|
@opindex pedantic-errors
|
|
|
|
The original ANSI C standard (X3.159-1989) was ratified in 1989 and
|
|
|
|
published in 1990. This standard was ratified as an ISO standard
|
|
|
|
(ISO/IEC 9899:1990) later in 1990. There were no technical
|
|
|
|
differences between these publications, although the sections of the
|
|
|
|
ANSI standard were renumbered and became clauses in the ISO standard.
|
|
|
|
This standard, in both its forms, is commonly known as @dfn{C89}, or
|
|
|
|
occasionally as @dfn{C90}, from the dates of ratification. The ANSI
|
|
|
|
standard, but not the ISO standard, also came with a Rationale
|
|
|
|
document. To select this standard in GCC, use one of the options
|
|
|
|
@option{-ansi}, @option{-std=c89} or @option{-std=iso9899:1990}; to obtain
|
|
|
|
all the diagnostics required by the standard, you should also specify
|
|
|
|
@option{-pedantic} (or @option{-pedantic-errors} if you want them to be
|
|
|
|
errors rather than warnings). @xref{C Dialect Options,,Options
|
|
|
|
Controlling C Dialect}.
|
|
|
|
|
|
|
|
Errors in the 1990 ISO C standard were corrected in two Technical
|
|
|
|
Corrigenda published in 1994 and 1996. GCC does not support the
|
|
|
|
uncorrected version.
|
|
|
|
|
|
|
|
An amendment to the 1990 standard was published in 1995. This
|
|
|
|
amendment added digraphs and @code{__STDC_VERSION__} to the language,
|
|
|
|
but otherwise concerned the library. This amendment is commonly known
|
|
|
|
as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or
|
|
|
|
@dfn{C95}. To select this standard in GCC, use the option
|
|
|
|
@option{-std=iso9899:199409} (with, as for other standard versions,
|
|
|
|
@option{-pedantic} to receive all required diagnostics).
|
|
|
|
|
|
|
|
A new edition of the ISO C standard was published in 1999 as ISO/IEC
|
|
|
|
9899:1999, and is commonly known as @dfn{C99}. GCC has incomplete
|
|
|
|
support for this standard version; see
|
2002-05-09 20:02:13 +00:00
|
|
|
@uref{http://gcc.gnu.org/gcc-3.1/c99status.html} for details. To select this
|
2002-02-01 18:16:02 +00:00
|
|
|
standard, use @option{-std=c99} or @option{-std=iso9899:1999}. (While in
|
|
|
|
development, drafts of this standard version were referred to as
|
|
|
|
@dfn{C9X}.)
|
|
|
|
|
|
|
|
Errors in the 1999 ISO C standard were corrected in a Technical
|
|
|
|
Corrigendum published in 2001. GCC does not support the uncorrected
|
|
|
|
version.
|
|
|
|
|
|
|
|
@opindex traditional
|
|
|
|
GCC also has some limited support for traditional (pre-ISO) C with the
|
|
|
|
@option{-traditional} option. This support may be of use for compiling
|
|
|
|
some very old programs that have not been updated to ISO C, but should
|
|
|
|
not be used for new programs. It will not work with some modern C
|
|
|
|
libraries such as the GNU C library.
|
|
|
|
|
|
|
|
By default, GCC provides some extensions to the C language that on
|
|
|
|
rare occasions conflict with the C standard. @xref{C
|
|
|
|
Extensions,,Extensions to the C Language Family}. Use of the
|
|
|
|
@option{-std} options listed above will disable these extensions where
|
|
|
|
they conflict with the C standard version selected. You may also
|
|
|
|
select an extended version of the C language explicitly with
|
|
|
|
@option{-std=gnu89} (for C89 with GNU extensions) or @option{-std=gnu99}
|
|
|
|
(for C99 with GNU extensions). The default, if no C language dialect
|
|
|
|
options are given, is @option{-std=gnu89}; this will change to
|
|
|
|
@option{-std=gnu99} in some future release when the C99 support is
|
|
|
|
complete. Some features that are part of the C99 standard are
|
|
|
|
accepted as extensions in C89 mode.
|
|
|
|
|
|
|
|
The ISO C standard defines (in clause 4) two classes of conforming
|
|
|
|
implementation. A @dfn{conforming hosted implementation} supports the
|
|
|
|
whole standard including all the library facilities; a @dfn{conforming
|
|
|
|
freestanding implementation} is only required to provide certain
|
|
|
|
library facilities: those in @code{<float.h>}, @code{<limits.h>},
|
|
|
|
@code{<stdarg.h>}, and @code{<stddef.h>}; since AMD1, also those in
|
|
|
|
@code{<iso646.h>}; and in C99, also those in @code{<stdbool.h>} and
|
|
|
|
@code{<stdint.h>}. In addition, complex types, added in C99, are not
|
|
|
|
required for freestanding implementations. The standard also defines
|
|
|
|
two environments for programs, a @dfn{freestanding environment},
|
|
|
|
required of all implementations and which may not have library
|
|
|
|
facilities beyond those required of freestanding implementations,
|
|
|
|
where the handling of program startup and termination are
|
|
|
|
implementation-defined, and a @dfn{hosted environment}, which is not
|
|
|
|
required, in which all the library facilities are provided and startup
|
|
|
|
is through a function @code{int main (void)} or @code{int main (int,
|
|
|
|
char *[])}. An OS kernel would be a freestanding environment; a
|
|
|
|
program using the facilities of an operating system would normally be
|
|
|
|
in a hosted implementation.
|
|
|
|
|
|
|
|
@opindex ffreestanding
|
|
|
|
GCC aims towards being usable as a conforming freestanding
|
|
|
|
implementation, or as the compiler for a conforming hosted
|
|
|
|
implementation. By default, it will act as the compiler for a hosted
|
|
|
|
implementation, defining @code{__STDC_HOSTED__} as @code{1} and
|
|
|
|
presuming that when the names of ISO C functions are used, they have
|
|
|
|
the semantics defined in the standard. To make it act as a conforming
|
|
|
|
freestanding implementation for a freestanding environment, use the
|
|
|
|
option @option{-ffreestanding}; it will then define
|
|
|
|
@code{__STDC_HOSTED__} to @code{0} and not make assumptions about the
|
2002-05-09 20:02:13 +00:00
|
|
|
meanings of function names from the standard library, with exceptions
|
|
|
|
noted below. To build an OS kernel, you may well still need to make
|
|
|
|
your own arrangements for linking and startup.
|
|
|
|
@xref{C Dialect Options,,Options Controlling C Dialect}.
|
2002-02-01 18:16:02 +00:00
|
|
|
|
|
|
|
GCC does not provide the library facilities required only of hosted
|
|
|
|
implementations, nor yet all the facilities required by C99 of
|
|
|
|
freestanding implementations; to use the facilities of a hosted
|
|
|
|
environment, you will need to find them elsewhere (for example, in the
|
|
|
|
GNU C library). @xref{Standard Libraries,,Standard Libraries}.
|
|
|
|
|
2002-05-09 20:02:13 +00:00
|
|
|
Most of the compiler support routines used by GCC are present in
|
|
|
|
@file{libgcc}, but there are a few exceptions. GCC requires the
|
|
|
|
freestanding environment provide @code{memcpy}, @code{memmove},
|
|
|
|
@code{memset} and @code{memcmp}. Some older ports of GCC are
|
|
|
|
configured to use the BSD @code{bcopy}, @code{bzero} and @code{bcmp}
|
|
|
|
functions instead, but this is deprecated for new ports.
|
|
|
|
Finally, if @code{__builtin_trap} is used, and the target does
|
|
|
|
not implement the @code{trap} pattern, then GCC will emit a call
|
|
|
|
to @code{abort}.
|
|
|
|
|
2002-02-01 18:16:02 +00:00
|
|
|
For references to Technical Corrigenda, Rationale documents and
|
|
|
|
information concerning the history of C that is available online, see
|
|
|
|
@uref{http://gcc.gnu.org/readings.html}
|
|
|
|
|
|
|
|
@c FIXME: details of C++ standard.
|
|
|
|
|
|
|
|
There is no formal written standard for Objective-C@. The most
|
|
|
|
authoritative manual is ``Object-Oriented Programming and the
|
2002-09-17 04:03:37 +00:00
|
|
|
Objective-C Language'', available at a number of web sites
|
|
|
|
|
|
|
|
@itemize
|
|
|
|
@item
|
|
|
|
@uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/}
|
|
|
|
is a recent version
|
|
|
|
@item
|
|
|
|
@uref{http://www.toodarkpark.org/computers/objc/}
|
|
|
|
is an older example
|
|
|
|
@item
|
|
|
|
@uref{http://www.gnustep.org}
|
|
|
|
has additional useful information
|
|
|
|
@end itemize
|
2002-02-01 18:16:02 +00:00
|
|
|
|
2002-05-09 20:02:13 +00:00
|
|
|
@xref{Top, GNAT Reference Manual, About This Guide, gnat_rm,
|
2002-02-01 18:16:02 +00:00
|
|
|
GNAT Reference Manual}, for information on standard
|
|
|
|
conformance and compatibility of the Ada compiler.
|
|
|
|
|
|
|
|
@xref{Language,,The GNU Fortran Language, g77, Using and Porting GNU
|
|
|
|
Fortran}, for details of the Fortran language supported by GCC@.
|
|
|
|
|
|
|
|
@xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj},
|
|
|
|
for details of compatibility between @code{gcj} and the Java Platform.
|