diff options
Diffstat (limited to 'gcc-4.2.1-5666.3/gcc/doc/standards.texi')
-rw-r--r-- | gcc-4.2.1-5666.3/gcc/doc/standards.texi | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/gcc-4.2.1-5666.3/gcc/doc/standards.texi b/gcc-4.2.1-5666.3/gcc/doc/standards.texi new file mode 100644 index 000000000..e8cbac854 --- /dev/null +++ b/gcc-4.2.1-5666.3/gcc/doc/standards.texi @@ -0,0 +1,195 @@ +@c Copyright (C) 2000, 2001, 2002, 2004 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 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/gcc-4.2/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 two Technical +Corrigenda published in 2001 and 2004. GCC does not support the uncorrected +version. + +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, 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}. + +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}. + +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}. +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}. + +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. + +@cindex Objective-C +@cindex Objective-C++ + +There is no formal written standard for Objective-C or Objective-C++@. The most +authoritative manual is ``Object-Oriented Programming and the +Objective-C Language'', available at a number of web sites: + +@itemize +@item +@uref{http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/} +is a recent (and periodically updated) version; +@item +@uref{http://www.toodarkpark.org/computers/objc/} +is an older example; +@item +@uref{http://www.gnustep.org} +and +@uref{http://gcc.gnu.org/readings.html} +have additional useful information. +@end itemize + +@cindex treelang +There is no standard for treelang, which is a sample language front end +for GCC@. Its only purpose is as a sample for people wishing to write a +new language for GCC@. The language is documented in +@file{gcc/treelang/treelang.texi} which can be turned into info or +HTML format. + +@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{Standards,,Standards, gfortran, The GNU Fortran Compiler}, for details +of standards supported by GNU Fortran. + +@xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj}, +for details of compatibility between @command{gcj} and the Java Platform. |