| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- 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. --> |
| <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ --> |
| <head> |
| <title>Using the GNU Compiler Collection (GCC): Standards</title> |
| |
| <meta name="description" content="Using the GNU Compiler Collection (GCC): Standards"> |
| <meta name="keywords" content="Using the GNU Compiler Collection (GCC): Standards"> |
| <meta name="resource-type" content="document"> |
| <meta name="distribution" content="global"> |
| <meta name="Generator" content="makeinfo"> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <link href="index.html#Top" rel="start" title="Top"> |
| <link href="Option-Index.html#Option-Index" rel="index" title="Option Index"> |
| <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> |
| <link href="index.html#Top" rel="up" title="Top"> |
| <link href="Invoking-GCC.html#Invoking-GCC" rel="next" title="Invoking GCC"> |
| <link href="G_002b_002b-and-GCC.html#G_002b_002b-and-GCC" rel="prev" title="G++ and GCC"> |
| <style type="text/css"> |
| <!-- |
| a.summary-letter {text-decoration: none} |
| blockquote.smallquotation {font-size: smaller} |
| div.display {margin-left: 3.2em} |
| div.example {margin-left: 3.2em} |
| div.indentedblock {margin-left: 3.2em} |
| div.lisp {margin-left: 3.2em} |
| div.smalldisplay {margin-left: 3.2em} |
| div.smallexample {margin-left: 3.2em} |
| div.smallindentedblock {margin-left: 3.2em; font-size: smaller} |
| div.smalllisp {margin-left: 3.2em} |
| kbd {font-style:oblique} |
| pre.display {font-family: inherit} |
| pre.format {font-family: inherit} |
| pre.menu-comment {font-family: serif} |
| pre.menu-preformatted {font-family: serif} |
| pre.smalldisplay {font-family: inherit; font-size: smaller} |
| pre.smallexample {font-size: smaller} |
| pre.smallformat {font-family: inherit; font-size: smaller} |
| pre.smalllisp {font-size: smaller} |
| span.nocodebreak {white-space:nowrap} |
| span.nolinebreak {white-space:nowrap} |
| span.roman {font-family:serif; font-weight:normal} |
| span.sansserif {font-family:sans-serif; font-weight:normal} |
| ul.no-bullet {list-style: none} |
| --> |
| </style> |
| |
| |
| </head> |
| |
| <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> |
| <a name="Standards"></a> |
| <div class="header"> |
| <p> |
| Next: <a href="Invoking-GCC.html#Invoking-GCC" accesskey="n" rel="next">Invoking GCC</a>, Previous: <a href="G_002b_002b-and-GCC.html#G_002b_002b-and-GCC" accesskey="p" rel="prev">G++ and GCC</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| <hr> |
| <a name="Language-Standards-Supported-by-GCC"></a> |
| <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. |
| </p> |
| <a name="C-Language"></a> |
| <h3 class="section">2.1 C Language</h3> |
| <a name="index-C-standard"></a> |
| <a name="index-C-standards"></a> |
| <a name="index-ANSI-C-standard"></a> |
| <a name="index-ANSI-C"></a> |
| <a name="index-ANSI-C89"></a> |
| <a name="index-C89"></a> |
| <a name="index-ANSI-X3_002e159_002d1989"></a> |
| <a name="index-X3_002e159_002d1989"></a> |
| <a name="index-ISO-C-standard"></a> |
| <a name="index-ISO-C"></a> |
| <a name="index-ISO-C90"></a> |
| <a name="index-ISO_002fIEC-9899"></a> |
| <a name="index-ISO-9899"></a> |
| <a name="index-C90"></a> |
| <a name="index-ISO-C94"></a> |
| <a name="index-C94"></a> |
| <a name="index-ISO-C95"></a> |
| <a name="index-C95"></a> |
| <a name="index-ISO-C99"></a> |
| <a name="index-C99"></a> |
| <a name="index-ISO-C9X"></a> |
| <a name="index-C9X"></a> |
| <a name="index-ISO-C11"></a> |
| <a name="index-C11"></a> |
| <a name="index-ISO-C1X"></a> |
| <a name="index-C1X"></a> |
| <a name="index-Technical-Corrigenda"></a> |
| <a name="index-TC1"></a> |
| <a name="index-Technical-Corrigendum-1"></a> |
| <a name="index-TC2"></a> |
| <a name="index-Technical-Corrigendum-2"></a> |
| <a name="index-TC3"></a> |
| <a name="index-Technical-Corrigendum-3"></a> |
| <a name="index-AMD1"></a> |
| <a name="index-freestanding-implementation"></a> |
| <a name="index-freestanding-environment"></a> |
| <a name="index-hosted-implementation"></a> |
| <a name="index-hosted-environment"></a> |
| <a name="index-_005f_005fSTDC_005fHOSTED_005f_005f"></a> |
| |
| <p>GCC supports three versions of the C standard, although support for |
| the most recent version is not yet complete. |
| </p> |
| <a name="index-std"></a> |
| <a name="index-ansi"></a> |
| <a name="index-pedantic"></a> |
| <a name="index-pedantic_002derrors"></a> |
| <p>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 <em>C89</em>, or |
| occasionally as <em>C90</em>, 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>-ansi</samp>, <samp>-std=c90</samp> or <samp>-std=iso9899:1990</samp>; to obtain |
| all the diagnostics required by the standard, you should also specify |
| <samp>-pedantic</samp> (or <samp>-pedantic-errors</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> |
| <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> |
| <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 <em>AMD1</em>; the amended standard is sometimes known as <em>C94</em> or |
| <em>C95</em>. To select this standard in GCC, use the option |
| <samp>-std=iso9899:199409</samp> (with, as for other standard versions, |
| <samp>-pedantic</samp> to receive all required diagnostics). |
| </p> |
| <p>A new edition of the ISO C standard was published in 1999 as ISO/IEC |
| 9899:1999, and is commonly known as <em>C99</em>. 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>-std=c99</samp> or <samp>-std=iso9899:1999</samp>. (While in |
| development, drafts of this standard version were referred to as |
| <em>C9X</em>.) |
| </p> |
| <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> |
| <p>A fourth version of the C standard, known as <em>C11</em>, was published |
| in 2011 as ISO/IEC 9899:2011. GCC has substantially complete support |
| for this standard, enabled with <samp>-std=c11</samp> or |
| <samp>-std=iso9899:2011</samp>. (While in development, drafts of this |
| standard version were referred to as <em>C1X</em>.) |
| </p> |
| <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>-std</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>-std=gnu90</samp> (for C90 with GNU extensions), <samp>-std=gnu99</samp> |
| (for C99 with GNU extensions) or <samp>-std=gnu11</samp> (for C11 with GNU |
| extensions). The default, if no C language dialect options are given, |
| is <samp>-std=gnu11</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> |
| <p>The ISO C standard defines (in clause 4) two classes of conforming |
| implementation. A <em>conforming hosted implementation</em> supports the |
| whole standard including all the library facilities; a <em>conforming |
| freestanding implementation</em> 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 <em>freestanding environment</em>, |
| 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 <em>hosted environment</em>, 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"></a> |
| <p>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>-ffreestanding</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> |
| <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> |
| <p>Most of the compiler support routines used by GCC are present in |
| <samp>libgcc</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> |
| <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> |
| </p> |
| <a name="C_002b_002b-Language"></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> |
| <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>-ansi</samp>, |
| <samp>-std=c++98</samp>, or <samp>-std=c++03</samp>; to obtain all the diagnostics |
| required by the standard, you should also specify <samp>-pedantic</samp> (or |
| <samp>-pedantic-errors</samp> if you want them to be errors rather than |
| warnings). |
| </p> |
| <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>-std=c++11</samp>; to obtain all the |
| diagnostics required by the standard, you should also specify |
| <samp>-pedantic</samp> (or <samp>-pedantic-errors</samp> if you want them to |
| be errors rather than warnings). |
| </p> |
| <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> |
| <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>-std</samp> option listed above will disable these extensions. You |
| may also select an extended version of the C++ language explicitly with |
| <samp>-std=gnu++98</samp> (for C++98 with GNU extensions) or |
| <samp>-std=gnu++11</samp> (for C++11 with GNU extensions). The default, if |
| no C++ language dialect options are given, is <samp>-std=gnu++98</samp>. |
| </p> |
| <a name="Objective_002dC-and-Objective_002dC_002b_002b-Languages"></a> |
| <h3 class="section">2.3 Objective-C and Objective-C++ Languages</h3> |
| <a name="index-Objective_002dC-1"></a> |
| <a name="index-Objective_002dC_002b_002b-1"></a> |
| |
| <p>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> |
| <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>-fgnu-runtime</samp> and |
| <samp>-fnext-runtime</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> |
| <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: |
| </p><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><li> <a href="http://objc.toodarkpark.net">http://objc.toodarkpark.net</a> |
| is the same document in another format; |
| </li><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 |
| </li></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>-fobjc-exceptions</samp>. The syntax is briefly documented in this |
| manual and in the Objective-C 2.0 manuals from Apple. |
| </p> |
| <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>-fobjc-std=objc1</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> |
| <p>GCC has currently no support for non-fragile instance variables. |
| </p> |
| <p>The authoritative manual on Objective-C 2.0 is available from Apple: |
| </p><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> |
| </li></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> |
| </p> |
| <a name="Go-Language"></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>. |
| </p> |
| <a name="References-for-Other-Languages"></a> |
| <h3 class="section">2.5 References for Other Languages</h3> |
| |
| <p>See <a href="http://gcc.gnu.org/onlinedocs/gnat_rm/index.html#Top">About This Guide</a> in <cite>GNAT Reference Manual</cite>, for information on standard |
| conformance and compatibility of the Ada compiler. |
| </p> |
| <p>See <a href="http://gcc.gnu.org/onlinedocs/gfortran/Standards.html#Standards">Standards</a> in <cite>The GNU Fortran Compiler</cite>, for details |
| of standards supported by GNU Fortran. |
| </p> |
| <p>See <a href="http://gcc.gnu.org/onlinedocs/gcj/Compatibility.html#Compatibility">Compatibility with the Java Platform</a> in <cite>GNU gcj</cite>, |
| for details of compatibility between <code>gcj</code> and the Java Platform. |
| </p> |
| |
| <hr> |
| <div class="header"> |
| <p> |
| Next: <a href="Invoking-GCC.html#Invoking-GCC" accesskey="n" rel="next">Invoking GCC</a>, Previous: <a href="G_002b_002b-and-GCC.html#G_002b_002b-and-GCC" accesskey="p" rel="prev">G++ and GCC</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| |
| |
| |
| </body> |
| </html> |