* configure.in: Remove special pex-cygwin consideration.
[official-gcc.git] / gcc / doc / standards.texi
blob098c925f7514450b5724bbe8392a5917c2bac793
1 @c Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @node Standards
6 @chapter Language Standards Supported by GCC
7 @cindex C standard
8 @cindex C standards
9 @cindex ANSI C standard
10 @cindex ANSI C
11 @cindex ANSI C89
12 @cindex C89
13 @cindex ANSI X3.159-1989
14 @cindex X3.159-1989
15 @cindex ISO C standard
16 @cindex ISO C
17 @cindex ISO C90
18 @cindex ISO/IEC 9899
19 @cindex ISO 9899
20 @cindex C90
21 @cindex ISO C94
22 @cindex C94
23 @cindex ISO C95
24 @cindex C95
25 @cindex ISO C99
26 @cindex C99
27 @cindex ISO C9X
28 @cindex C9X
29 @cindex Technical Corrigenda
30 @cindex TC1
31 @cindex Technical Corrigendum 1
32 @cindex TC2
33 @cindex Technical Corrigendum 2
34 @cindex AMD1
35 @cindex freestanding implementation
36 @cindex freestanding environment
37 @cindex hosted implementation
38 @cindex hosted environment
39 @findex __STDC_HOSTED__
41 For each language compiled by GCC for which there is a standard, GCC
42 attempts to follow one or more versions of that standard, possibly
43 with some exceptions, and possibly with some extensions.
45 GCC supports three versions of the C standard, although support for
46 the most recent version is not yet complete.
48 @opindex std
49 @opindex ansi
50 @opindex pedantic
51 @opindex pedantic-errors
52 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
53 published in 1990.  This standard was ratified as an ISO standard
54 (ISO/IEC 9899:1990) later in 1990.  There were no technical
55 differences between these publications, although the sections of the
56 ANSI standard were renumbered and became clauses in the ISO standard.
57 This standard, in both its forms, is commonly known as @dfn{C89}, or
58 occasionally as @dfn{C90}, from the dates of ratification.  The ANSI
59 standard, but not the ISO standard, also came with a Rationale
60 document.  To select this standard in GCC, use one of the options
61 @option{-ansi}, @option{-std=c89} or @option{-std=iso9899:1990}; to obtain
62 all the diagnostics required by the standard, you should also specify
63 @option{-pedantic} (or @option{-pedantic-errors} if you want them to be
64 errors rather than warnings).  @xref{C Dialect Options,,Options
65 Controlling C Dialect}.
67 Errors in the 1990 ISO C standard were corrected in two Technical
68 Corrigenda published in 1994 and 1996.  GCC does not support the
69 uncorrected version.
71 An amendment to the 1990 standard was published in 1995.  This
72 amendment added digraphs and @code{__STDC_VERSION__} to the language,
73 but otherwise concerned the library.  This amendment is commonly known
74 as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or
75 @dfn{C95}.  To select this standard in GCC, use the option
76 @option{-std=iso9899:199409} (with, as for other standard versions,
77 @option{-pedantic} to receive all required diagnostics).
79 A new edition of the ISO C standard was published in 1999 as ISO/IEC
80 9899:1999, and is commonly known as @dfn{C99}.  GCC has incomplete
81 support for this standard version; see
82 @uref{http://gcc.gnu.org/c99status.html} for details.  To select this
83 standard, use @option{-std=c99} or @option{-std=iso9899:1999}.  (While in
84 development, drafts of this standard version were referred to as
85 @dfn{C9X}.)
87 Errors in the 1999 ISO C standard were corrected in a Technical
88 Corrigendum published in 2001.  GCC does not support the uncorrected
89 version.
91 By default, GCC provides some extensions to the C language that on
92 rare occasions conflict with the C standard.  @xref{C
93 Extensions,,Extensions to the C Language Family}.  Use of the
94 @option{-std} options listed above will disable these extensions where
95 they conflict with the C standard version selected.  You may also
96 select an extended version of the C language explicitly with
97 @option{-std=gnu89} (for C89 with GNU extensions) or @option{-std=gnu99}
98 (for C99 with GNU extensions).  The default, if no C language dialect
99 options are given, is @option{-std=gnu89}; this will change to
100 @option{-std=gnu99} in some future release when the C99 support is
101 complete.  Some features that are part of the C99 standard are
102 accepted as extensions in C89 mode.
104 The ISO C standard defines (in clause 4) two classes of conforming
105 implementation.  A @dfn{conforming hosted implementation} supports the
106 whole standard including all the library facilities; a @dfn{conforming
107 freestanding implementation} is only required to provide certain
108 library facilities: those in @code{<float.h>}, @code{<limits.h>},
109 @code{<stdarg.h>}, and @code{<stddef.h>}; since AMD1, also those in
110 @code{<iso646.h>}; and in C99, also those in @code{<stdbool.h>} and
111 @code{<stdint.h>}.  In addition, complex types, added in C99, are not
112 required for freestanding implementations.  The standard also defines
113 two environments for programs, a @dfn{freestanding environment},
114 required of all implementations and which may not have library
115 facilities beyond those required of freestanding implementations,
116 where the handling of program startup and termination are
117 implementation-defined, and a @dfn{hosted environment}, which is not
118 required, in which all the library facilities are provided and startup
119 is through a function @code{int main (void)} or @code{int main (int,
120 char *[])}.  An OS kernel would be a freestanding environment; a
121 program using the facilities of an operating system would normally be
122 in a hosted implementation.
124 @opindex ffreestanding
125 GCC aims towards being usable as a conforming freestanding
126 implementation, or as the compiler for a conforming hosted
127 implementation.  By default, it will act as the compiler for a hosted
128 implementation, defining @code{__STDC_HOSTED__} as @code{1} and
129 presuming that when the names of ISO C functions are used, they have
130 the semantics defined in the standard.  To make it act as a conforming
131 freestanding implementation for a freestanding environment, use the
132 option @option{-ffreestanding}; it will then define
133 @code{__STDC_HOSTED__} to @code{0} and not make assumptions about the
134 meanings of function names from the standard library, with exceptions
135 noted below.  To build an OS kernel, you may well still need to make
136 your own arrangements for linking and startup.
137 @xref{C Dialect Options,,Options Controlling C Dialect}.
139 GCC does not provide the library facilities required only of hosted
140 implementations, nor yet all the facilities required by C99 of
141 freestanding implementations; to use the facilities of a hosted
142 environment, you will need to find them elsewhere (for example, in the
143 GNU C library).  @xref{Standard Libraries,,Standard Libraries}.
145 Most of the compiler support routines used by GCC are present in
146 @file{libgcc}, but there are a few exceptions.  GCC requires the
147 freestanding environment provide @code{memcpy}, @code{memmove},
148 @code{memset} and @code{memcmp}.  Some older ports of GCC are 
149 configured to use the BSD @code{bcopy}, @code{bzero} and @code{bcmp}
150 functions instead, but this is deprecated for new ports.
151 Finally, if @code{__builtin_trap} is used, and the target does 
152 not implement the @code{trap} pattern, then GCC will emit a call
153 to @code{abort}.
155 For references to Technical Corrigenda, Rationale documents and
156 information concerning the history of C that is available online, see
157 @uref{http://gcc.gnu.org/readings.html}
159 @c FIXME: details of C++ standard.
161 There is no formal written standard for Objective-C@.  The most
162 authoritative manual is ``Object-Oriented Programming and the
163 Objective-C Language'', available at a number of web sites
165 @itemize
166 @item
167 @uref{http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/}
168 is a recent version
169 @item
170 @uref{http://www.toodarkpark.org/computers/objc/}
171 is an older example
172 @item
173 @uref{http://www.gnustep.org}
174 has additional useful information
175 @end itemize
177 @cindex treelang
178 There is no standard for treelang, which is a sample language front end
179 for GCC. Its only purpose is as a sample for people wishing to write a
180 new language for GCC. The language is documented in
181 @file{gcc/treelang/treelang.texi} which can be turned into info or
182 HTML format.
184 @xref{Top, GNAT Reference Manual, About This Guide, gnat_rm,
185 GNAT Reference Manual}, for information on standard
186 conformance and compatibility of the Ada compiler.
188 @xref{Language,,The GNU Fortran Language, g77, Using and Porting GNU
189 Fortran}, for details of the Fortran language supported by GCC@.
191 @xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj},
192 for details of compatibility between @command{gcj} and the Java Platform.