C11 (formerly C1X) is an informal name for ISO/IEC 9899:2011, a past
standard Standard may refer to:
Symbols
* Colours, standards and guidons, kinds of military signs
* Standard (emblem), a type of a large symbol or emblem used for identification
Norms, conventions or requirements
* Standard (metrology), an object th ...
for the
C programming language
''The C Programming Language'' (sometimes termed ''K&R'', after its authors' initials) is a computer programming book written by Brian Kernighan and Dennis Ritchie, the latter of whom originally designed and implemented the language, as well as ...
. It replaced
C99
C99 (previously known as C9X) is an informal name for ISO/IEC 9899:1999, a past version of the C programming language standard. It extends the previous version ( C90) with new features for the language and the standard library, and helps impl ...
(standard ISO/IEC 9899:1999) and has been superseded by
C17 (standard ISO/IEC 9899:2018). C11 mainly standardizes features already supported by common contemporary compilers, and includes a detailed memory model to better support multiple
threads of execution. Due to delayed availability of conforming C99 implementations, C11 makes certain features optional, to make it easier to comply with the core language standard.
The final draft, N1570,
was published in April 2011. The new standard passed its final draft review on October 10, 2011 and was officially ratified by ISO and published as ISO/IEC 9899:2011 on December 8, 2011, with no comments requiring resolution by participating national bodies.
A standard macro
__STDC_VERSION__
is defined with value
201112L
to indicate that C11 support is available. Some features of C11 are supported by the
GCC starting with version 4.6,
Clang
Clang is a compiler front end for the C, C++, Objective-C, and Objective-C++ programming languages, as well as the OpenMP, OpenCL, RenderScript, CUDA, and HIP frameworks. It acts as a drop-in replacement for the GNU Compiler Collection (GCC), ...
starting with version 3.1,
IBM XL C
XL C/C++ is the name of IBM's proprietary optimizing C/C++ compiler for IBM-supported environments.
Compiler
The IBM XL compilers are built from modularized components consisting of front ends (for different programming languages), a platform- ...
starting with version 12.1, and
Microsoft Visual C++
Microsoft Visual C++ (MSVC) is a compiler for the C, C++ and C++/CX programming languages by Microsoft. MSVC is proprietary software; it was originally a standalone product but later became a part of Visual Studio and made available in both tri ...
starting with VS 2019 (16.8) in September 2020.
Changes from C99
The standard includes several changes to the
C99
C99 (previously known as C9X) is an informal name for ISO/IEC 9899:1999, a past version of the C programming language standard. It extends the previous version ( C90) with new features for the language and the standard library, and helps impl ...
language and library specifications, such as:
*
Alignment
Alignment may refer to:
Archaeology
* Alignment (archaeology), a co-linear arrangement of features or structures with external landmarks
* Stone alignment, a linear arrangement of upright, parallel megalithic standing stones
Biology
* Structu ...
specification (
_Alignas
specifier,
_Alignof
operator,
aligned_alloc
function,
<stdalign.h>
header)
* The
_Noreturn
function specifier and the
<stdnoreturn.h>
header
* Type-generic expressions using the
_Generic
keyword. For example, the following macro
cbrt(x)
translates to
cbrtl(x)
,
cbrt(x)
or
cbrtf(x)
depending on the type of
x
:
#define cbrt(x) _Generic((x), long double: cbrtl, \
default: cbrt, \
float: cbrtf)(x)
*
Multi-threading support (
_Thread_local
storage-class specifier,
<threads.h>
header including thread creation/management functions,
mutex
In computer science, a lock or mutex (from mutual exclusion) is a synchronization primitive: a mechanism that enforces limits on access to a resource when there are many threads of execution. A lock is designed to enforce a mutual exclusion concur ...
,
condition variable
In concurrent programming, a monitor is a synchronization construct that allows threads to have both mutual exclusion and the ability to wait (block) for a certain condition to become false. Monitors also have a mechanism for signaling other th ...
and
thread-specific storage functionality, as well as
<stdatomic.h>
for atomic operations supporting the C11 memory model).
* Improved
Unicode
Unicode, formally The Unicode Standard,The formal version reference is is an information technology Technical standard, standard for the consistent character encoding, encoding, representation, and handling of Character (computing), text expre ...
support based on the C Unicode Technical Report ISO/IEC TR 19769:2004 (
char16_t
and
char32_t
types for storing
UTF-16
UTF-16 (16-bit computing, 16-bit Unicode Transformation Format) is a character encoding capable of encoding all 1,112,064 valid code points of Unicode (in fact this number of code points is dictated by the design of UTF-16). The encoding is variab ...
/
UTF-32
UTF-32 (32- bit Unicode Transformation Format) is a fixed-length encoding used to encode Unicode code points that uses exactly 32 bits (four bytes) per code point (but a number of leading bits must be zero as there are far fewer than 232 Unicode ...
encoded data, including conversion functions in
<uchar.h>
and the corresponding
u
and
U
string literal prefixes, as well as the
u8
prefix for
UTF-8
UTF-8 is a variable-width encoding, variable-length character encoding used for electronic communication. Defined by the Unicode Standard, the name is derived from ''Unicode'' (or ''Universal Coded Character Set'') ''Transformation Format 8-bit'' ...
encoded literals).
* Removal of the
gets
function (in favor of safer
fgets
), which was deprecated in the previous C language standard revision, ISO/IEC 9899:1999/Cor.3:2007(E).
*
Bounds-checking interfaces (Annex K).
* Analyzability features (Annex L).
* More macros for querying the characteristics of floating-point types, concerning
subnormal floating-point numbers and the number of decimal digits the type is able to store.
* Anonymous ''structures'' and ''unions'', useful when unions and structures are nested, e.g. in .
*
Static assertions, which are evaluated during translation at a later phase than
#if
and
#error
, when types are understood by the translator.
* An exclusive create-and-open mode (
"…x"
suffix) for
fopen
. This behaves like
O_CREAT, O_EXCL
in
POSIX
The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system- and user-level application programming interf ...
, which is commonly used for
lock files.
* The
quick_exit
function as a third way to terminate a program, intended to do at least minimal deinitialization.
* A new
timespec_get
function and corresponding structure in
<time.h>
with a degree of
POSIX
The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines both the system- and user-level application programming interf ...
compatibility.
* Macros for the construction of
complex values (partly because
real + imaginary*I
might not yield the expected value if
imaginary
is infinite or
NaN
Nan or NAN may refer to:
Places China
* Nan County, Yiyang, Hunan, China
* Nan Commandery, historical commandery in Hubei, China
Thailand
* Nan Province
** Nan, Thailand, the administrative capital of Nan Province
* Nan River
People Given name
...
).
Optional features
The new revision allows implementations to not support certain parts of the standard — including some that had been mandatory to support in the 1999 revision.
Programs can use predefined macros to determine whether an implementation supports a certain feature or not.
Criticism
The optional bounds-checking interfaces (Annex K) remain controversial and have not been widely implemented, and their deprecation or removal from the next standard revision has been proposed.
Even Microsoft, a main proponent of this interface, does not conform to the definition. In addition, Annex K does not include the more useful TR24731-2 (dynamic allocation functions), such as and . The few open-source implementations include
Open Watcom
Watcom C/C++ (currently Open Watcom C/C++) is an integrated development environment (IDE) product from Watcom International Corporation for the C, C++, and Fortran programming languages. Watcom C/C++ was a commercial product until it was discon ...
C/C++'s "Safer C" library and safeclib.
See also
*
C++20 C20 or C-20 may refer to:
Science and technology
* Carbon-20 (C-20 or 20C), an isotope of carbon
* C20, the smallest possible fullerene (a carbon molecule)
* C20 (engineering), a mix of concrete that has a compressive strength of 20 newtons per sq ...
,
C++17
C++17 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++17 replaced the prior version of the C++ standard, called C++14, and was later replaced by C++20.
History
Before the C++ Standards Committee fixed a 3-year rel ...
,
C++14
C++14 is a version of the ISO/IEC 14882 standard for the C++ programming language. It is intended to be a small extension over C++11, featuring mainly bug fixes and small improvements, and was replaced by C++17. Its approval was announced on Augus ...
,
C++11
C++11 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++11 replaced the prior version of the C++ standard, called C++03, and was later replaced by C++14. The name follows the tradition of naming language versions by ...
,
C++03
C, or c, is the third letter in the Latin alphabet, used in the modern English alphabet, the alphabets of other western European languages and others worldwide. Its name in English is ''cee'' (pronounced ), plural ''cees''.
History
"C" ...
,
C++98 C98 or C-98 may refer to:
* C-98 Clipper, the military designation of the Boeing 314 flying boat
* CJYC-FM, "Big John FM", formerly known as "C98"
* Cray C98, a model of the Cray C90
* Ruy Lopez (ECO code), a chess opening
* Lake Village Airpor ...
, versions of the C++ programming language standard
*
Compatibility of C and C++
The C and C++ programming languages are closely related but have many significant differences. C++ began as a fork of an early, pre-standardized C, and was designed to be mostly source-and-link compatible with C compilers of the time. Due to thi ...
References
External links
The C1X CharterN1570 the final draft of C1X, dated 12 April 2011
*
The standard draftin simple ASCII and linked HTML forms, in addition to the PDF.
*
Safe C Library of Bounded APIs
*
Safe C API—Concise solution of buffer overflow, The OWASP Foundation, OWASP AppSec, Beijing 2011
{{ISO standards
C (programming language)
Programming language standards
IEC standards
ISO standards