diff options
Diffstat (limited to 'contrib/gcc/doc/standards.texi')
-rw-r--r-- | contrib/gcc/doc/standards.texi | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/contrib/gcc/doc/standards.texi b/contrib/gcc/doc/standards.texi new file mode 100644 index 000000000000..5d5ed0c9a9b3 --- /dev/null +++ b/contrib/gcc/doc/standards.texi @@ -0,0 +1,178 @@ +@c Copyright (C) 2000, 2001 Free Software Foundation, Inc. +@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 +@uref{http://gcc.gnu.org/c99status.html} for details. To select this +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 +meanings of function names from the standard library. 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}. + +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}. + +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 +Objective-C Language'', available at a number of web sites; +@uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/} has a +recent version, while @uref{http://www.toodarkpark.org/computers/objc/} +is an older example. @uref{http://www.gnustep.org} includes useful +information as well. + +@xref{Top, GNAT Reference Manual, About This Guide, gnat_rm, +GNAT Reference Manual}, for information on standard +conformance and compatibility of the Ada compiler. + +@xref{References,,Language Definition References, chill, GNU Chill}, +for details of the CHILL standard. + +@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. |