| 1 |
711 |
jeremybenn |
@c Copyright (C) 2000, 2001, 2002, 2004, 2006, 2007, 2008, 2010
|
| 2 |
|
|
@c Free Software Foundation, Inc.
|
| 3 |
|
|
@c This is part of the GCC manual.
|
| 4 |
|
|
@c For copying conditions, see the file gcc.texi.
|
| 5 |
|
|
|
| 6 |
|
|
@node Standards
|
| 7 |
|
|
@chapter Language Standards Supported by GCC
|
| 8 |
|
|
|
| 9 |
|
|
For each language compiled by GCC for which there is a standard, GCC
|
| 10 |
|
|
attempts to follow one or more versions of that standard, possibly
|
| 11 |
|
|
with some exceptions, and possibly with some extensions.
|
| 12 |
|
|
|
| 13 |
|
|
@section C language
|
| 14 |
|
|
@cindex C standard
|
| 15 |
|
|
@cindex C standards
|
| 16 |
|
|
@cindex ANSI C standard
|
| 17 |
|
|
@cindex ANSI C
|
| 18 |
|
|
@cindex ANSI C89
|
| 19 |
|
|
@cindex C89
|
| 20 |
|
|
@cindex ANSI X3.159-1989
|
| 21 |
|
|
@cindex X3.159-1989
|
| 22 |
|
|
@cindex ISO C standard
|
| 23 |
|
|
@cindex ISO C
|
| 24 |
|
|
@cindex ISO C90
|
| 25 |
|
|
@cindex ISO/IEC 9899
|
| 26 |
|
|
@cindex ISO 9899
|
| 27 |
|
|
@cindex C90
|
| 28 |
|
|
@cindex ISO C94
|
| 29 |
|
|
@cindex C94
|
| 30 |
|
|
@cindex ISO C95
|
| 31 |
|
|
@cindex C95
|
| 32 |
|
|
@cindex ISO C99
|
| 33 |
|
|
@cindex C99
|
| 34 |
|
|
@cindex ISO C9X
|
| 35 |
|
|
@cindex C9X
|
| 36 |
|
|
@cindex ISO C11
|
| 37 |
|
|
@cindex C11
|
| 38 |
|
|
@cindex ISO C1X
|
| 39 |
|
|
@cindex C1X
|
| 40 |
|
|
@cindex Technical Corrigenda
|
| 41 |
|
|
@cindex TC1
|
| 42 |
|
|
@cindex Technical Corrigendum 1
|
| 43 |
|
|
@cindex TC2
|
| 44 |
|
|
@cindex Technical Corrigendum 2
|
| 45 |
|
|
@cindex TC3
|
| 46 |
|
|
@cindex Technical Corrigendum 3
|
| 47 |
|
|
@cindex AMD1
|
| 48 |
|
|
@cindex freestanding implementation
|
| 49 |
|
|
@cindex freestanding environment
|
| 50 |
|
|
@cindex hosted implementation
|
| 51 |
|
|
@cindex hosted environment
|
| 52 |
|
|
@findex __STDC_HOSTED__
|
| 53 |
|
|
|
| 54 |
|
|
GCC supports three versions of the C standard, although support for
|
| 55 |
|
|
the most recent version is not yet complete.
|
| 56 |
|
|
|
| 57 |
|
|
@opindex std
|
| 58 |
|
|
@opindex ansi
|
| 59 |
|
|
@opindex pedantic
|
| 60 |
|
|
@opindex pedantic-errors
|
| 61 |
|
|
The original ANSI C standard (X3.159-1989) was ratified in 1989 and
|
| 62 |
|
|
published in 1990. This standard was ratified as an ISO standard
|
| 63 |
|
|
(ISO/IEC 9899:1990) later in 1990. There were no technical
|
| 64 |
|
|
differences between these publications, although the sections of the
|
| 65 |
|
|
ANSI standard were renumbered and became clauses in the ISO standard.
|
| 66 |
|
|
This standard, in both its forms, is commonly known as @dfn{C89}, or
|
| 67 |
|
|
occasionally as @dfn{C90}, from the dates of ratification. The ANSI
|
| 68 |
|
|
standard, but not the ISO standard, also came with a Rationale
|
| 69 |
|
|
document. To select this standard in GCC, use one of the options
|
| 70 |
|
|
@option{-ansi}, @option{-std=c90} or @option{-std=iso9899:1990}; to obtain
|
| 71 |
|
|
all the diagnostics required by the standard, you should also specify
|
| 72 |
|
|
@option{-pedantic} (or @option{-pedantic-errors} if you want them to be
|
| 73 |
|
|
errors rather than warnings). @xref{C Dialect Options,,Options
|
| 74 |
|
|
Controlling C Dialect}.
|
| 75 |
|
|
|
| 76 |
|
|
Errors in the 1990 ISO C standard were corrected in two Technical
|
| 77 |
|
|
Corrigenda published in 1994 and 1996. GCC does not support the
|
| 78 |
|
|
uncorrected version.
|
| 79 |
|
|
|
| 80 |
|
|
An amendment to the 1990 standard was published in 1995. This
|
| 81 |
|
|
amendment added digraphs and @code{__STDC_VERSION__} to the language,
|
| 82 |
|
|
but otherwise concerned the library. This amendment is commonly known
|
| 83 |
|
|
as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or
|
| 84 |
|
|
@dfn{C95}. To select this standard in GCC, use the option
|
| 85 |
|
|
@option{-std=iso9899:199409} (with, as for other standard versions,
|
| 86 |
|
|
@option{-pedantic} to receive all required diagnostics).
|
| 87 |
|
|
|
| 88 |
|
|
A new edition of the ISO C standard was published in 1999 as ISO/IEC
|
| 89 |
|
|
9899:1999, and is commonly known as @dfn{C99}. GCC has incomplete
|
| 90 |
|
|
support for this standard version; see
|
| 91 |
|
|
@uref{http://gcc.gnu.org/c99status.html} for details. To select this
|
| 92 |
|
|
standard, use @option{-std=c99} or @option{-std=iso9899:1999}. (While in
|
| 93 |
|
|
development, drafts of this standard version were referred to as
|
| 94 |
|
|
@dfn{C9X}.)
|
| 95 |
|
|
|
| 96 |
|
|
Errors in the 1999 ISO C standard were corrected in three Technical
|
| 97 |
|
|
Corrigenda published in 2001, 2004 and 2007. GCC does not support the
|
| 98 |
|
|
uncorrected version.
|
| 99 |
|
|
|
| 100 |
|
|
A fourth version of the C standard, known as @dfn{C11}, was published
|
| 101 |
|
|
in 2011 as ISO/IEC 9899:2011. GCC has limited incomplete support for
|
| 102 |
|
|
parts of this standard, enabled with @option{-std=c11} or
|
| 103 |
|
|
@option{-std=iso9899:2011}. (While in development, drafts of this
|
| 104 |
|
|
standard version were referred to as @dfn{C1X}.)
|
| 105 |
|
|
|
| 106 |
|
|
By default, GCC provides some extensions to the C language that on
|
| 107 |
|
|
rare occasions conflict with the C standard. @xref{C
|
| 108 |
|
|
Extensions,,Extensions to the C Language Family}. Use of the
|
| 109 |
|
|
@option{-std} options listed above will disable these extensions where
|
| 110 |
|
|
they conflict with the C standard version selected. You may also
|
| 111 |
|
|
select an extended version of the C language explicitly with
|
| 112 |
|
|
@option{-std=gnu90} (for C90 with GNU extensions), @option{-std=gnu99}
|
| 113 |
|
|
(for C99 with GNU extensions) or @option{-std=gnu11} (for C11 with GNU
|
| 114 |
|
|
extensions). The default, if no C language dialect
|
| 115 |
|
|
options are given, is @option{-std=gnu90}; this will change to
|
| 116 |
|
|
@option{-std=gnu99} or @option{-std=gnu11} in some future release when
|
| 117 |
|
|
the C99 or C11 support is
|
| 118 |
|
|
complete. Some features that are part of the C99 standard are
|
| 119 |
|
|
accepted as extensions in C90 mode, and some features that are part of
|
| 120 |
|
|
the C11 standard are accepted as extensions in C90 and C99 modes.
|
| 121 |
|
|
|
| 122 |
|
|
The ISO C standard defines (in clause 4) two classes of conforming
|
| 123 |
|
|
implementation. A @dfn{conforming hosted implementation} supports the
|
| 124 |
|
|
whole standard including all the library facilities; a @dfn{conforming
|
| 125 |
|
|
freestanding implementation} is only required to provide certain
|
| 126 |
|
|
library facilities: those in @code{<float.h>}, @code{<limits.h>},
|
| 127 |
|
|
@code{<stdarg.h>}, and @code{<stddef.h>}; since AMD1, also those in
|
| 128 |
|
|
@code{<iso646.h>}; since C99, also those in @code{<stdbool.h>} and
|
| 129 |
|
|
@code{<stdint.h>}; and since C11, also those in @code{<stdalign.h>}
|
| 130 |
|
|
and @code{<stdnoreturn.h>}. In addition, complex types, added in C99, are not
|
| 131 |
|
|
required for freestanding implementations. The standard also defines
|
| 132 |
|
|
two environments for programs, a @dfn{freestanding environment},
|
| 133 |
|
|
required of all implementations and which may not have library
|
| 134 |
|
|
facilities beyond those required of freestanding implementations,
|
| 135 |
|
|
where the handling of program startup and termination are
|
| 136 |
|
|
implementation-defined, and a @dfn{hosted environment}, which is not
|
| 137 |
|
|
required, in which all the library facilities are provided and startup
|
| 138 |
|
|
is through a function @code{int main (void)} or @code{int main (int,
|
| 139 |
|
|
char *[])}. An OS kernel would be a freestanding environment; a
|
| 140 |
|
|
program using the facilities of an operating system would normally be
|
| 141 |
|
|
in a hosted implementation.
|
| 142 |
|
|
|
| 143 |
|
|
@opindex ffreestanding
|
| 144 |
|
|
GCC aims towards being usable as a conforming freestanding
|
| 145 |
|
|
implementation, or as the compiler for a conforming hosted
|
| 146 |
|
|
implementation. By default, it will act as the compiler for a hosted
|
| 147 |
|
|
implementation, defining @code{__STDC_HOSTED__} as @code{1} and
|
| 148 |
|
|
presuming that when the names of ISO C functions are used, they have
|
| 149 |
|
|
the semantics defined in the standard. To make it act as a conforming
|
| 150 |
|
|
freestanding implementation for a freestanding environment, use the
|
| 151 |
|
|
option @option{-ffreestanding}; it will then define
|
| 152 |
|
|
@code{__STDC_HOSTED__} to @code{0} and not make assumptions about the
|
| 153 |
|
|
meanings of function names from the standard library, with exceptions
|
| 154 |
|
|
noted below. To build an OS kernel, you may well still need to make
|
| 155 |
|
|
your own arrangements for linking and startup.
|
| 156 |
|
|
@xref{C Dialect Options,,Options Controlling C Dialect}.
|
| 157 |
|
|
|
| 158 |
|
|
GCC does not provide the library facilities required only of hosted
|
| 159 |
|
|
implementations, nor yet all the facilities required by C99 of
|
| 160 |
|
|
freestanding implementations; to use the facilities of a hosted
|
| 161 |
|
|
environment, you will need to find them elsewhere (for example, in the
|
| 162 |
|
|
GNU C library). @xref{Standard Libraries,,Standard Libraries}.
|
| 163 |
|
|
|
| 164 |
|
|
Most of the compiler support routines used by GCC are present in
|
| 165 |
|
|
@file{libgcc}, but there are a few exceptions. GCC requires the
|
| 166 |
|
|
freestanding environment provide @code{memcpy}, @code{memmove},
|
| 167 |
|
|
@code{memset} and @code{memcmp}.
|
| 168 |
|
|
Finally, if @code{__builtin_trap} is used, and the target does
|
| 169 |
|
|
not implement the @code{trap} pattern, then GCC will emit a call
|
| 170 |
|
|
to @code{abort}.
|
| 171 |
|
|
|
| 172 |
|
|
For references to Technical Corrigenda, Rationale documents and
|
| 173 |
|
|
information concerning the history of C that is available online, see
|
| 174 |
|
|
@uref{http://gcc.gnu.org/readings.html}
|
| 175 |
|
|
|
| 176 |
|
|
@section C++ language
|
| 177 |
|
|
|
| 178 |
|
|
GCC supports the original ISO C++ standard (1998) and contains
|
| 179 |
|
|
experimental support for the second ISO C++ standard (2011).
|
| 180 |
|
|
|
| 181 |
|
|
The original ISO C++ standard was published as the ISO standard (ISO/IEC
|
| 182 |
|
|
14882:1998) and amended by a Technical Corrigenda published in 2003
|
| 183 |
|
|
(ISO/IEC 14882:2003). These standards are referred to as C++98 and
|
| 184 |
|
|
C++03, respectively. GCC implements the majority of C++98 (@code{export}
|
| 185 |
|
|
is a notable exception) and most of the changes in C++03. To select
|
| 186 |
|
|
this standard in GCC, use one of the options @option{-ansi},
|
| 187 |
|
|
@option{-std=c++98}, or @option{-std=c++03}; to obtain all the diagnostics
|
| 188 |
|
|
required by the standard, you should also specify @option{-pedantic} (or
|
| 189 |
|
|
@option{-pedantic-errors} if you want them to be errors rather than
|
| 190 |
|
|
warnings).
|
| 191 |
|
|
|
| 192 |
|
|
A revised ISO C++ standard was published in 2011 as ISO/IEC
|
| 193 |
|
|
14882:2011, and is referred to as C++11; before its publication it was
|
| 194 |
|
|
commonly referred to as C++0x. C++11 contains several
|
| 195 |
|
|
changes to the C++ language, most of which have been implemented in an
|
| 196 |
|
|
experimental C++11 mode in GCC@. For information
|
| 197 |
|
|
regarding the C++11 features available in the experimental C++11 mode,
|
| 198 |
|
|
see @uref{http://gcc.gnu.org/projects/@/cxx0x.html}. To select this
|
| 199 |
|
|
standard in GCC, use the option @option{-std=c++11}; to obtain all the
|
| 200 |
|
|
diagnostics required by the standard, you should also specify
|
| 201 |
|
|
@option{-pedantic} (or @option{-pedantic-errors} if you want them to
|
| 202 |
|
|
be errors rather than warnings).
|
| 203 |
|
|
|
| 204 |
|
|
More information about the C++ standards is available on the ISO C++
|
| 205 |
|
|
committee's web site at @uref{http://www.open-std.org/@/jtc1/@/sc22/@/wg21/}.
|
| 206 |
|
|
|
| 207 |
|
|
By default, GCC provides some extensions to the C++ language; @xref{C++
|
| 208 |
|
|
Dialect Options,Options Controlling C++ Dialect}. Use of the
|
| 209 |
|
|
@option{-std} option listed above will disable these extensions. You
|
| 210 |
|
|
may also select an extended version of the C++ language explicitly with
|
| 211 |
|
|
@option{-std=gnu++98} (for C++98 with GNU extensions) or
|
| 212 |
|
|
@option{-std=gnu++11} (for C++11 with GNU extensions). The default, if
|
| 213 |
|
|
no C++ language dialect options are given, is @option{-std=gnu++98}.
|
| 214 |
|
|
|
| 215 |
|
|
@section Objective-C and Objective-C++ languages
|
| 216 |
|
|
@cindex Objective-C
|
| 217 |
|
|
@cindex Objective-C++
|
| 218 |
|
|
|
| 219 |
|
|
GCC supports ``traditional'' Objective-C (also known as ``Objective-C
|
| 220 |
|
|
1.0'') and contains support for the Objective-C exception and
|
| 221 |
|
|
synchronization syntax. It has also support for a number of
|
| 222 |
|
|
``Objective-C 2.0'' language extensions, including properties, fast
|
| 223 |
|
|
enumeration (only for Objective-C), method attributes and the
|
| 224 |
|
|
@@optional and @@required keywords in protocols. GCC supports
|
| 225 |
|
|
Objective-C++ and features available in Objective-C are also available
|
| 226 |
|
|
in Objective-C++@.
|
| 227 |
|
|
|
| 228 |
|
|
GCC by default uses the GNU Objective-C runtime library, which is part
|
| 229 |
|
|
of GCC and is not the same as the Apple/NeXT Objective-C runtime
|
| 230 |
|
|
library used on Apple systems. There are a number of differences
|
| 231 |
|
|
documented in this manual. The options @option{-fgnu-runtime} and
|
| 232 |
|
|
@option{-fnext-runtime} allow you to switch between producing output
|
| 233 |
|
|
that works with the GNU Objective-C runtime library and output that
|
| 234 |
|
|
works with the Apple/NeXT Objective-C runtime library.
|
| 235 |
|
|
|
| 236 |
|
|
There is no formal written standard for Objective-C or Objective-C++@.
|
| 237 |
|
|
The authoritative manual on traditional Objective-C (1.0) is
|
| 238 |
|
|
``Object-Oriented Programming and the Objective-C Language'',
|
| 239 |
|
|
available at a number of web sites:
|
| 240 |
|
|
@itemize
|
| 241 |
|
|
@item
|
| 242 |
|
|
@uref{http://www.gnustep.org/@/resources/@/documentation/@/ObjectivCBook.pdf}
|
| 243 |
|
|
is the original NeXTstep document;
|
| 244 |
|
|
@item
|
| 245 |
|
|
@uref{http://objc.toodarkpark.net}
|
| 246 |
|
|
is the same document in another format;
|
| 247 |
|
|
@item
|
| 248 |
|
|
@uref{http://developer.apple.com/@/mac/@/library/@/documentation/@/Cocoa/@/Conceptual/@/ObjectiveC/}
|
| 249 |
|
|
has an updated version but make sure you search for ``Object Oriented Programming and the Objective-C Programming Language 1.0'',
|
| 250 |
|
|
not documentation on the newer ``Objective-C 2.0'' language
|
| 251 |
|
|
@end itemize
|
| 252 |
|
|
|
| 253 |
|
|
The Objective-C exception and synchronization syntax (that is, the
|
| 254 |
|
|
keywords @@try, @@throw, @@catch, @@finally and @@synchronized) is
|
| 255 |
|
|
supported by GCC and is enabled with the option
|
| 256 |
|
|
@option{-fobjc-exceptions}. The syntax is briefly documented in this
|
| 257 |
|
|
manual and in the Objective-C 2.0 manuals from Apple.
|
| 258 |
|
|
|
| 259 |
|
|
The Objective-C 2.0 language extensions and features are automatically
|
| 260 |
|
|
enabled; they include properties (via the @@property, @@synthesize and
|
| 261 |
|
|
@@dynamic keywords), fast enumeration (not available in
|
| 262 |
|
|
Objective-C++), attributes for methods (such as deprecated, noreturn,
|
| 263 |
|
|
sentinel, format), the unused attribute for method arguments, the
|
| 264 |
|
|
@@package keyword for instance variables and the @@optional and
|
| 265 |
|
|
@@required keywords in protocols. You can disable all these
|
| 266 |
|
|
Objective-C 2.0 language extensions with the option
|
| 267 |
|
|
@option{-fobjc-std=objc1}, which causes the compiler to recognize the
|
| 268 |
|
|
same Objective-C language syntax recognized by GCC 4.0, and to produce
|
| 269 |
|
|
an error if one of the new features is used.
|
| 270 |
|
|
|
| 271 |
|
|
GCC has currently no support for non-fragile instance variables.
|
| 272 |
|
|
|
| 273 |
|
|
The authoritative manual on Objective-C 2.0 is available from Apple:
|
| 274 |
|
|
@itemize
|
| 275 |
|
|
@item
|
| 276 |
|
|
@uref{http://developer.apple.com/@/mac/@/library/@/documentation/@/Cocoa/@/Conceptual/@/ObjectiveC/}
|
| 277 |
|
|
@end itemize
|
| 278 |
|
|
|
| 279 |
|
|
For more information concerning the history of Objective-C that is
|
| 280 |
|
|
available online, see @uref{http://gcc.gnu.org/readings.html}
|
| 281 |
|
|
|
| 282 |
|
|
@section Go language
|
| 283 |
|
|
|
| 284 |
|
|
The Go language continues to evolve as of this writing; see the
|
| 285 |
|
|
@uref{http://golang.org/@/doc/@/go_spec.html, current language
|
| 286 |
|
|
specifications}. At present there are no specific versions of Go, and
|
| 287 |
|
|
there is no way to describe the language supported by GCC in terms of
|
| 288 |
|
|
a specific version. In general GCC tracks the evolving specification
|
| 289 |
|
|
closely, and any given release will support the language as of the
|
| 290 |
|
|
date that the release was frozen.
|
| 291 |
|
|
|
| 292 |
|
|
@section References for other languages
|
| 293 |
|
|
|
| 294 |
|
|
@xref{Top, GNAT Reference Manual, About This Guide, gnat_rm,
|
| 295 |
|
|
GNAT Reference Manual}, for information on standard
|
| 296 |
|
|
conformance and compatibility of the Ada compiler.
|
| 297 |
|
|
|
| 298 |
|
|
@xref{Standards,,Standards, gfortran, The GNU Fortran Compiler}, for details
|
| 299 |
|
|
of standards supported by GNU Fortran.
|
| 300 |
|
|
|
| 301 |
|
|
@xref{Compatibility,,Compatibility with the Java Platform, gcj, GNU gcj},
|
| 302 |
|
|
for details of compatibility between @command{gcj} and the Java Platform.
|