@c Copyright (C) 2000-2021 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

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.

@section C Language
@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 ISO C11
@cindex C11
@cindex ISO C1X
@cindex C1X
@cindex ISO C17
@cindex C17
@cindex ISO C2X
@cindex C2X
@cindex Technical Corrigenda
@cindex TC1
@cindex Technical Corrigendum 1
@cindex TC2
@cindex Technical Corrigendum 2
@cindex TC3
@cindex Technical Corrigendum 3
@cindex AMD1
@cindex freestanding implementation
@cindex freestanding environment
@cindex hosted implementation
@cindex hosted environment
@findex __STDC_HOSTED__

@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.
The ANSI
standard, but not the ISO standard, also came with a Rationale
document.  
This standard, in both its forms, is commonly known as @dfn{C89}, or
occasionally as @dfn{C90}, from the dates of ratification.
To select this standard in GCC, use one of the options
@option{-ansi}, @option{-std=c90} 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}.  (While in
development, drafts of this standard version were referred to as
@dfn{C9X}.)  GCC has substantially
complete support for this standard version; see
@uref{http://gcc.gnu.org/c99status.html} for details.  To select this
standard, use @option{-std=c99} or @option{-std=iso9899:1999}.  

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.

A fourth version of the C standard, known as @dfn{C11}, was published
in 2011 as ISO/IEC 9899:2011.  (While in development, drafts of this
standard version were referred to as @dfn{C1X}.)
GCC has substantially complete support
for this standard, enabled with @option{-std=c11} or
@option{-std=iso9899:2011}.  A version with corrections integrated was
prepared in 2017 and published in 2018 as ISO/IEC 9899:2018; it is
known as @dfn{C17} and is supported with @option{-std=c17} or
@option{-std=iso9899:2017}; the corrections are also applied with
@option{-std=c11}, and the only difference between the options is the
value of @code{__STDC_VERSION__}.

A further version of the C standard, known as @dfn{C2X}, is under
development; experimental and incomplete support for this is enabled
with @option{-std=c2x}.

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}.  
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.
Use of the
@option{-std} options listed above disables 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=gnu90} (for C90 with GNU extensions), @option{-std=gnu99}
(for C99 with GNU extensions) or @option{-std=gnu11} (for C11 with GNU
extensions).  

The default, if no C language dialect options are given,
is @option{-std=gnu17}.

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>}; since C99, also those in @code{<stdbool.h>} and
@code{<stdint.h>}; and since C11, also those in @code{<stdalign.h>}
and @code{<stdnoreturn.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 is an example
of a program running in a freestanding environment; 
a program using the facilities of an
operating system is an example of a program running in a hosted environment.

@opindex ffreestanding
GCC aims towards being usable as a conforming freestanding
implementation, or as the compiler for a conforming hosted
implementation.  By default, it acts 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 then defines
@code{__STDC_HOSTED__} to @code{0} and does 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 on all platforms.  
To use the facilities of a hosted
environment, you 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 emits 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}

@section C++ Language

GCC supports the original ISO C++ standard published in 1998,
and the 2011, 2014, 2017 and mostly 2020 revisions.

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}
is a notable exception) and most of the changes in C++03.  To select
this standard in GCC, use one of the options @option{-ansi},
@option{-std=c++98}, or @option{-std=c++03}; 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).

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, all of which have been implemented in GCC@. For details
see @uref{https://gcc.gnu.org/projects/@/cxx-status.html#cxx11}.
To select this standard in GCC, use the option @option{-std=c++11}.

Another revised ISO C++ standard was published in 2014 as ISO/IEC
14882:2014, and is referred to as C++14; before its publication it was
sometimes referred to as C++1y.  C++14 contains several further
changes to the C++ language, all of which have been implemented in GCC@.
For details see @uref{https://gcc.gnu.org/projects/@/cxx-status.html#cxx14}.
To select this standard in GCC, use the option @option{-std=c++14}.

The C++ language was further revised in 2017 and ISO/IEC 14882:2017 was
published.  This is referred to as C++17, and before publication was
often referred to as C++1z.  GCC supports all the changes in that
specification.  For further details see
@uref{https://gcc.gnu.org/projects/@/cxx-status.html#cxx17}.  Use the option
@option{-std=c++17} to select this variant of C++.

Another revised ISO C++ standard was published in 2020 as ISO/IEC
14882:2020, and is referred to as C++20; before its publication it was
sometimes referred to as C++2a.  GCC supports most of the changes in the
new specification.  For further details see
@uref{https://gcc.gnu.org/projects/@/cxx-status.html#cxx20}.
To select this standard in GCC, use the option @option{-std=c++20}.

More information about the C++ standards is available on the ISO C++
committee's web site at @uref{http://www.open-std.org/@/jtc1/@/sc22/@/wg21/}.

To obtain all the diagnostics required by any of the standard versions
described above you should specify @option{-pedantic}
or @option{-pedantic-errors}, otherwise GCC will allow some non-ISO C++
features as extensions. @xref{Warning Options}.

By default, GCC also provides some additional extensions to the C++ language
that on rare occasions conflict with the C++ standard.  @xref{C++
Dialect Options,Options Controlling C++ Dialect}.  Use of the
@option{-std} options listed above disables these extensions where they
they conflict with the C++ standard version selected.  You may also
select an extended version of the C++ language explicitly with
@option{-std=gnu++98} (for C++98 with GNU extensions), or
@option{-std=gnu++11} (for C++11 with GNU extensions), or
@option{-std=gnu++14} (for C++14 with GNU extensions), or
@option{-std=gnu++17} (for C++17 with GNU extensions), or
@option{-std=gnu++20} (for C++20 with GNU extensions).

The default, if
no C++ language dialect options are given, is @option{-std=gnu++17}.

@section Objective-C and Objective-C++ Languages
@cindex Objective-C
@cindex Objective-C++

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++@.

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 @option{-fgnu-runtime} and
@option{-fnext-runtime} 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.

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'':
@uref{http://www.gnustep.org/@/resources/@/documentation/@/ObjectivCBook.pdf}
is the original NeXTstep document.

The Objective-C exception and synchronization syntax (that is, the
keywords @code{@@try}, @code{@@throw}, @code{@@catch},
@code{@@finally} and @code{@@synchronized}) is
supported by GCC and is enabled with the option
@option{-fobjc-exceptions}.  The syntax is briefly documented in this
manual and in the Objective-C 2.0 manuals from Apple.

The Objective-C 2.0 language extensions and features are automatically
enabled; they include properties (via the @code{@@property},
@code{@@synthesize} and
@code{@@dynamic keywords}), fast enumeration (not available in
Objective-C++), attributes for methods (such as @code{deprecated},
@code{noreturn}, @code{sentinel}, @code{format}),
the @code{unused} attribute for method arguments, the
@code{@@package} keyword for instance variables and the @code{@@optional} and
@code{@@required} keywords in protocols.  You can disable all these
Objective-C 2.0 language extensions with the option
@option{-fobjc-std=objc1}, 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.

GCC has currently no support for non-fragile instance variables.

The authoritative manual on Objective-C 2.0 is available from Apple:
@itemize
@item
@uref{https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html}
@end itemize

For more information concerning the history of Objective-C that is
available online, see @uref{http://gcc.gnu.org/readings.html}

@section Go Language

As of the GCC 4.7.1 release, GCC supports the Go 1 language standard,
described at @uref{https://golang.org/doc/go1}.

@section D language

GCC supports the D 2.0 programming language.  The D language itself is
currently defined by its reference implementation and supporting language
specification, described at @uref{https://dlang.org/spec/spec.html}.

@section References for Other Languages

@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.
