You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
296 lines
18 KiB
HTML
296 lines
18 KiB
HTML
4 years ago
|
<html lang="en">
|
||
|
<head>
|
||
|
<title>Standards - Using the GNU Compiler Collection (GCC)</title>
|
||
|
<meta http-equiv="Content-Type" content="text/html">
|
||
|
<meta name="description" content="Using the GNU Compiler Collection (GCC)">
|
||
|
<meta name="generator" content="makeinfo 4.13">
|
||
|
<link title="Top" rel="start" href="index.html#Top">
|
||
|
<link rel="prev" href="G_002b_002b-and-GCC.html#G_002b_002b-and-GCC" title="G++ and GCC">
|
||
|
<link rel="next" href="Invoking-GCC.html#Invoking-GCC" title="Invoking GCC">
|
||
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
||
|
<!--
|
||
|
Copyright (C) 1988-2015 Free Software Foundation, Inc.
|
||
|
|
||
|
Permission is granted to copy, distribute and/or modify this document
|
||
|
under the terms of the GNU Free Documentation License, Version 1.3 or
|
||
|
any later version published by the Free Software Foundation; with the
|
||
|
Invariant Sections being ``Funding Free Software'', the Front-Cover
|
||
|
Texts being (a) (see below), and with the Back-Cover Texts being (b)
|
||
|
(see below). A copy of the license is included in the section entitled
|
||
|
``GNU Free Documentation License''.
|
||
|
|
||
|
(a) The FSF's Front-Cover Text is:
|
||
|
|
||
|
A GNU Manual
|
||
|
|
||
|
(b) The FSF's Back-Cover Text is:
|
||
|
|
||
|
You have freedom to copy and modify this GNU Manual, like GNU
|
||
|
software. Copies published by the Free Software Foundation raise
|
||
|
funds for GNU development.-->
|
||
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
||
|
<style type="text/css"><!--
|
||
|
pre.display { font-family:inherit }
|
||
|
pre.format { font-family:inherit }
|
||
|
pre.smalldisplay { font-family:inherit; font-size:smaller }
|
||
|
pre.smallformat { font-family:inherit; font-size:smaller }
|
||
|
pre.smallexample { font-size:smaller }
|
||
|
pre.smalllisp { font-size:smaller }
|
||
|
span.sc { font-variant:small-caps }
|
||
|
span.roman { font-family:serif; font-weight:normal; }
|
||
|
span.sansserif { font-family:sans-serif; font-weight:normal; }
|
||
|
--></style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class="node">
|
||
|
<a name="Standards"></a>
|
||
|
<p>
|
||
|
Next: <a rel="next" accesskey="n" href="Invoking-GCC.html#Invoking-GCC">Invoking GCC</a>,
|
||
|
Previous: <a rel="previous" accesskey="p" href="G_002b_002b-and-GCC.html#G_002b_002b-and-GCC">G++ and GCC</a>,
|
||
|
Up: <a rel="up" accesskey="u" href="index.html#Top">Top</a>
|
||
|
<hr>
|
||
|
</div>
|
||
|
|
||
|
<h2 class="chapter">2 Language Standards Supported by GCC</h2>
|
||
|
|
||
|
<p>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.
|
||
|
|
||
|
<h3 class="section">2.1 C Language</h3>
|
||
|
|
||
|
<p><a name="index-C-standard-21"></a><a name="index-C-standards-22"></a><a name="index-ANSI-C-standard-23"></a><a name="index-ANSI-C-24"></a><a name="index-ANSI-C89-25"></a><a name="index-C89-26"></a><a name="index-ANSI-X3_002e159_002d1989-27"></a><a name="index-X3_002e159_002d1989-28"></a><a name="index-ISO-C-standard-29"></a><a name="index-ISO-C-30"></a><a name="index-ISO-C90-31"></a><a name="index-ISO_002fIEC-9899-32"></a><a name="index-ISO-9899-33"></a><a name="index-C90-34"></a><a name="index-ISO-C94-35"></a><a name="index-C94-36"></a><a name="index-ISO-C95-37"></a><a name="index-C95-38"></a><a name="index-ISO-C99-39"></a><a name="index-C99-40"></a><a name="index-ISO-C9X-41"></a><a name="index-C9X-42"></a><a name="index-ISO-C11-43"></a><a name="index-C11-44"></a><a name="index-ISO-C1X-45"></a><a name="index-C1X-46"></a><a name="index-Technical-Corrigenda-47"></a><a name="index-TC1-48"></a><a name="index-Technical-Corrigendum-1-49"></a><a name="index-TC2-50"></a><a name="index-Technical-Corrigendum-2-51"></a><a name="index-TC3-52"></a><a name="index-Technical-Corrigendum-3-53"></a><a name="index-AMD1-54"></a><a name="index-freestanding-implementation-55"></a><a name="index-freestanding-environment-56"></a><a name="index-hosted-implementation-57"></a><a name="index-hosted-environment-58"></a><a name="index-g_t_005f_005fSTDC_005fHOSTED_005f_005f-59"></a>
|
||
|
GCC supports three versions of the C standard, although support for
|
||
|
the most recent version is not yet complete.
|
||
|
|
||
|
<p><a name="index-std-60"></a><a name="index-ansi-61"></a><a name="index-pedantic-62"></a><a name="index-pedantic_002derrors-63"></a>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</dfn>, or
|
||
|
occasionally as <dfn>C90</dfn>, 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
|
||
|
<samp><span class="option">-ansi</span></samp>, <samp><span class="option">-std=c90</span></samp> or <samp><span class="option">-std=iso9899:1990</span></samp>; to obtain
|
||
|
all the diagnostics required by the standard, you should also specify
|
||
|
<samp><span class="option">-pedantic</span></samp> (or <samp><span class="option">-pedantic-errors</span></samp> if you want them to be
|
||
|
errors rather than warnings). See <a href="C-Dialect-Options.html#C-Dialect-Options">Options Controlling C Dialect</a>.
|
||
|
|
||
|
<p>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.
|
||
|
|
||
|
<p>An amendment to the 1990 standard was published in 1995. This
|
||
|
amendment added digraphs and <code>__STDC_VERSION__</code> to the language,
|
||
|
but otherwise concerned the library. This amendment is commonly known
|
||
|
as <dfn>AMD1</dfn>; the amended standard is sometimes known as <dfn>C94</dfn> or
|
||
|
<dfn>C95</dfn>. To select this standard in GCC, use the option
|
||
|
<samp><span class="option">-std=iso9899:199409</span></samp> (with, as for other standard versions,
|
||
|
<samp><span class="option">-pedantic</span></samp> to receive all required diagnostics).
|
||
|
|
||
|
<p>A new edition of the ISO C standard was published in 1999 as ISO/IEC
|
||
|
9899:1999, and is commonly known as <dfn>C99</dfn>. GCC has substantially
|
||
|
complete support for this standard version; see
|
||
|
<a href="http://gcc.gnu.org/c99status.html">http://gcc.gnu.org/c99status.html</a> for details. To select this
|
||
|
standard, use <samp><span class="option">-std=c99</span></samp> or <samp><span class="option">-std=iso9899:1999</span></samp>. (While in
|
||
|
development, drafts of this standard version were referred to as
|
||
|
<dfn>C9X</dfn>.)
|
||
|
|
||
|
<p>Errors in the 1999 ISO C standard were corrected in three Technical
|
||
|
Corrigenda published in 2001, 2004 and 2007. GCC does not support the
|
||
|
uncorrected version.
|
||
|
|
||
|
<p>A fourth version of the C standard, known as <dfn>C11</dfn>, was published
|
||
|
in 2011 as ISO/IEC 9899:2011. GCC has substantially complete support
|
||
|
for this standard, enabled with <samp><span class="option">-std=c11</span></samp> or
|
||
|
<samp><span class="option">-std=iso9899:2011</span></samp>. (While in development, drafts of this
|
||
|
standard version were referred to as <dfn>C1X</dfn>.)
|
||
|
|
||
|
<p>By default, GCC provides some extensions to the C language that on
|
||
|
rare occasions conflict with the C standard. See <a href="C-Extensions.html#C-Extensions">Extensions to the C Language Family</a>. Use of the
|
||
|
<samp><span class="option">-std</span></samp> 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
|
||
|
<samp><span class="option">-std=gnu90</span></samp> (for C90 with GNU extensions), <samp><span class="option">-std=gnu99</span></samp>
|
||
|
(for C99 with GNU extensions) or <samp><span class="option">-std=gnu11</span></samp> (for C11 with GNU
|
||
|
extensions). The default, if no C language dialect options are given,
|
||
|
is <samp><span class="option">-std=gnu11</span></samp>. Some features that are part of the C99 standard
|
||
|
are accepted as extensions in C90 mode, and some features that are part
|
||
|
of the C11 standard are accepted as extensions in C90 and C99 modes.
|
||
|
|
||
|
<p>The ISO C standard defines (in clause 4) two classes of conforming
|
||
|
implementation. A <dfn>conforming hosted implementation</dfn> supports the
|
||
|
whole standard including all the library facilities; a <dfn>conforming
|
||
|
freestanding implementation</dfn> is only required to provide certain
|
||
|
library facilities: those in <code><float.h></code>, <code><limits.h></code>,
|
||
|
<code><stdarg.h></code>, and <code><stddef.h></code>; since AMD1, also those in
|
||
|
<code><iso646.h></code>; since C99, also those in <code><stdbool.h></code> and
|
||
|
<code><stdint.h></code>; and since C11, also those in <code><stdalign.h></code>
|
||
|
and <code><stdnoreturn.h></code>. 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</dfn>,
|
||
|
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</dfn>, which is not
|
||
|
required, in which all the library facilities are provided and startup
|
||
|
is through a function <code>int main (void)</code> or <code>int main (int,
|
||
|
char *[])</code>. An OS kernel would be a freestanding environment; a
|
||
|
program using the facilities of an operating system would normally be
|
||
|
in a hosted implementation.
|
||
|
|
||
|
<p><a name="index-ffreestanding-64"></a>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__</code> as <code>1</code> 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 <samp><span class="option">-ffreestanding</span></samp>; it will then define
|
||
|
<code>__STDC_HOSTED__</code> to <code>0</code> 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.
|
||
|
See <a href="C-Dialect-Options.html#C-Dialect-Options">Options Controlling C Dialect</a>.
|
||
|
|
||
|
<p>GCC does not provide the library facilities required only of hosted
|
||
|
implementations, nor yet all the facilities required by C99 of
|
||
|
freestanding implementations on all platforms; to use the facilities of a hosted
|
||
|
environment, you will need to find them elsewhere (for example, in the
|
||
|
GNU C library). See <a href="Standard-Libraries.html#Standard-Libraries">Standard Libraries</a>.
|
||
|
|
||
|
<p>Most of the compiler support routines used by GCC are present in
|
||
|
<samp><span class="file">libgcc</span></samp>, but there are a few exceptions. GCC requires the
|
||
|
freestanding environment provide <code>memcpy</code>, <code>memmove</code>,
|
||
|
<code>memset</code> and <code>memcmp</code>.
|
||
|
Finally, if <code>__builtin_trap</code> is used, and the target does
|
||
|
not implement the <code>trap</code> pattern, then GCC will emit a call
|
||
|
to <code>abort</code>.
|
||
|
|
||
|
<p>For references to Technical Corrigenda, Rationale documents and
|
||
|
information concerning the history of C that is available online, see
|
||
|
<a href="http://gcc.gnu.org/readings.html">http://gcc.gnu.org/readings.html</a>
|
||
|
|
||
|
<h3 class="section">2.2 C++ Language</h3>
|
||
|
|
||
|
<p>GCC supports the original ISO C++ standard (1998) and contains
|
||
|
experimental support for the second ISO C++ standard (2011).
|
||
|
|
||
|
<p>The original ISO C++ standard was published as the ISO standard (ISO/IEC
|
||
|
14882:1998) and amended by a Technical Corrigenda published in 2003
|
||
|
(ISO/IEC 14882:2003). These standards are referred to as C++98 and
|
||
|
C++03, respectively. GCC implements the majority of C++98 (<code>export</code>
|
||
|
is a notable exception) and most of the changes in C++03. To select
|
||
|
this standard in GCC, use one of the options <samp><span class="option">-ansi</span></samp>,
|
||
|
<samp><span class="option">-std=c++98</span></samp>, or <samp><span class="option">-std=c++03</span></samp>; to obtain all the diagnostics
|
||
|
required by the standard, you should also specify <samp><span class="option">-pedantic</span></samp> (or
|
||
|
<samp><span class="option">-pedantic-errors</span></samp> if you want them to be errors rather than
|
||
|
warnings).
|
||
|
|
||
|
<p>A revised ISO C++ standard was published in 2011 as ISO/IEC
|
||
|
14882:2011, and is referred to as C++11; before its publication it was
|
||
|
commonly referred to as C++0x. C++11 contains several
|
||
|
changes to the C++ language, most of which have been implemented in an
|
||
|
experimental C++11 mode in GCC. For information
|
||
|
regarding the C++11 features available in the experimental C++11 mode,
|
||
|
see <a href="http://gcc.gnu.org/projects/cxx0x.html">http://gcc.gnu.org/projects/cxx0x.html</a>. To select this
|
||
|
standard in GCC, use the option <samp><span class="option">-std=c++11</span></samp>; to obtain all the
|
||
|
diagnostics required by the standard, you should also specify
|
||
|
<samp><span class="option">-pedantic</span></samp> (or <samp><span class="option">-pedantic-errors</span></samp> if you want them to
|
||
|
be errors rather than warnings).
|
||
|
|
||
|
<p>More information about the C++ standards is available on the ISO C++
|
||
|
committee's web site at <a href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21/</a>.
|
||
|
|
||
|
<p>By default, GCC provides some extensions to the C++ language; See <a href="C_002b_002b-Dialect-Options.html#C_002b_002b-Dialect-Options">Options Controlling C++ Dialect</a>. Use of the
|
||
|
<samp><span class="option">-std</span></samp> option listed above will disable these extensions. You
|
||
|
may also select an extended version of the C++ language explicitly with
|
||
|
<samp><span class="option">-std=gnu++98</span></samp> (for C++98 with GNU extensions) or
|
||
|
<samp><span class="option">-std=gnu++11</span></samp> (for C++11 with GNU extensions). The default, if
|
||
|
no C++ language dialect options are given, is <samp><span class="option">-std=gnu++98</span></samp>.
|
||
|
|
||
|
<h3 class="section">2.3 Objective-C and Objective-C++ Languages</h3>
|
||
|
|
||
|
<p><a name="index-Objective_002dC-65"></a><a name="index-Objective_002dC_002b_002b-66"></a>
|
||
|
GCC supports “traditional” Objective-C (also known as “Objective-C
|
||
|
1.0”) and contains support for the Objective-C exception and
|
||
|
synchronization syntax. It has also support for a number of
|
||
|
“Objective-C 2.0” language extensions, including properties, fast
|
||
|
enumeration (only for Objective-C), method attributes and the
|
||
|
@optional and @required keywords in protocols. GCC supports
|
||
|
Objective-C++ and features available in Objective-C are also available
|
||
|
in Objective-C++.
|
||
|
|
||
|
<p>GCC by default uses the GNU Objective-C runtime library, which is part
|
||
|
of GCC and is not the same as the Apple/NeXT Objective-C runtime
|
||
|
library used on Apple systems. There are a number of differences
|
||
|
documented in this manual. The options <samp><span class="option">-fgnu-runtime</span></samp> and
|
||
|
<samp><span class="option">-fnext-runtime</span></samp> allow you to switch between producing output
|
||
|
that works with the GNU Objective-C runtime library and output that
|
||
|
works with the Apple/NeXT Objective-C runtime library.
|
||
|
|
||
|
<p>There is no formal written standard for Objective-C or Objective-C++.
|
||
|
The authoritative manual on traditional Objective-C (1.0) is
|
||
|
“Object-Oriented Programming and the Objective-C Language”,
|
||
|
available at a number of web sites:
|
||
|
<ul>
|
||
|
<li><a href="http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf">http://www.gnustep.org/resources/documentation/ObjectivCBook.pdf</a>
|
||
|
is the original NeXTstep document;
|
||
|
<li><a href="http://objc.toodarkpark.net">http://objc.toodarkpark.net</a>
|
||
|
is the same document in another format;
|
||
|
<li><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/">http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/</a>
|
||
|
has an updated version but make sure you search for “Object Oriented Programming and the Objective-C Programming Language 1.0”,
|
||
|
not documentation on the newer “Objective-C 2.0” language
|
||
|
</ul>
|
||
|
|
||
|
<p>The Objective-C exception and synchronization syntax (that is, the
|
||
|
keywords @try, @throw, @catch, @finally and @synchronized) is
|
||
|
supported by GCC and is enabled with the option
|
||
|
<samp><span class="option">-fobjc-exceptions</span></samp>. The syntax is briefly documented in this
|
||
|
manual and in the Objective-C 2.0 manuals from Apple.
|
||
|
|
||
|
<p>The Objective-C 2.0 language extensions and features are automatically
|
||
|
enabled; they include properties (via the @property, @synthesize and
|
||
|
@dynamic keywords), fast enumeration (not available in
|
||
|
Objective-C++), attributes for methods (such as deprecated, noreturn,
|
||
|
sentinel, format), the unused attribute for method arguments, the
|
||
|
@package keyword for instance variables and the @optional and
|
||
|
@required keywords in protocols. You can disable all these
|
||
|
Objective-C 2.0 language extensions with the option
|
||
|
<samp><span class="option">-fobjc-std=objc1</span></samp>, which causes the compiler to recognize the
|
||
|
same Objective-C language syntax recognized by GCC 4.0, and to produce
|
||
|
an error if one of the new features is used.
|
||
|
|
||
|
<p>GCC has currently no support for non-fragile instance variables.
|
||
|
|
||
|
<p>The authoritative manual on Objective-C 2.0 is available from Apple:
|
||
|
<ul>
|
||
|
<li><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/">http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/</a>
|
||
|
</ul>
|
||
|
|
||
|
<p>For more information concerning the history of Objective-C that is
|
||
|
available online, see <a href="http://gcc.gnu.org/readings.html">http://gcc.gnu.org/readings.html</a>
|
||
|
|
||
|
<h3 class="section">2.4 Go Language</h3>
|
||
|
|
||
|
<p>As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
|
||
|
described at <a href="http://golang.org/doc/go1.html">http://golang.org/doc/go1.html</a>.
|
||
|
|
||
|
<h3 class="section">2.5 References for Other Languages</h3>
|
||
|
|
||
|
<p>See <a href="../gnat_rm/index.html#Top">GNAT Reference Manual</a>, for information on standard
|
||
|
conformance and compatibility of the Ada compiler.
|
||
|
|
||
|
<p>See <a href="../gfortran/Standards.html#Standards">Standards</a>, for details
|
||
|
of standards supported by GNU Fortran.
|
||
|
|
||
|
<p>See <a href="../gcj/Compatibility.html#Compatibility">Compatibility with the Java Platform</a>,
|
||
|
for details of compatibility between <samp><span class="command">gcj</span></samp> and the Java Platform.
|
||
|
|
||
|
<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc. -->
|
||
|
<!-- This is part of the GCC manual. -->
|
||
|
<!-- For copying conditions, see the file gcc.texi. -->
|
||
|
</body></html>
|
||
|
|