C2x
   HOME

TheInfoList



OR:

C2x is an informal name for the next (after C17) major
C language C (''pronounced like the letter c'') is a general-purpose computer programming language. It was created in the 1970s by Dennis Ritchie, and remains very widely used and influential. By design, C's features cleanly reflect the capabilities o ...
standard revision. It is expected to be voted on in 2023 and would therefore become C23. The most recent publicly available draft of C23 was released on January 24, 2023. The first WG14 meeting for the C2x draft was held in October 2019, then virtual remote meetings were held due to
COVID-19 pandemic The COVID-19 pandemic, also known as the coronavirus pandemic, is an ongoing global pandemic of coronavirus disease 2019 (COVID-19) caused by severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2). The novel virus was first identif ...
in March/April 2020, October/November 2020, March/April 2021, August/September 2021, November/December 2021, January/February 2022, May 2022, July 2022, January 2023.


Features

Changes integrated into the latest C23 draft are: ;Standard Library (new functions) :* add memset_explicit() function in <
string.h The C programming language has a set of functions implementing operations on strings (character strings and byte strings) in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. Fo ...
>
to erase sensitive data, where memory store must always be performed regardless of optimizations. :* add
memccpy The C programming language has a set of functions implementing operations on strings (character strings and byte strings) in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. F ...
()
function in to efficiently concatenate strings - similar to
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 ...
and
SVID The Svid (russian: Свидь) is a river in Kargopolsky District in the south-west of Arkhangelsk Oblast in Russia. It connects Lake Vozhe and Lake Lacha and belongs to the river basin of the Onega. It is long, and the area of its basin . Th ...
C extensions. :* add
strdup The C programming language has a set of functions implementing operations on strings (character strings and byte strings) in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. Fo ...
()
and strndup() functions in to allocate a copy of a string – similar to
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 ...
and
SVID The Svid (russian: Свидь) is a river in Kargopolsky District in the south-west of Arkhangelsk Oblast in Russia. It connects Lake Vozhe and Lake Lacha and belongs to the river basin of the Onega. It is long, and the area of its basin . Th ...
C extensions. :* add memalignment() function in < stdlib.h> to determine the byte alignment of a pointer. :* add bit utility functions / macros / types in new header < stdbit.h> to examine many integer types. All start with stdc_ to minimize conflict with legacy code and 3rd party libraries. :** In the following, replace * with uc, us, ui, ul, ull for five function names, or blank for a type-generic macro. :** add stdc_count_ones*() and stdc_count_zeros*() to count number of 1 or 0 bits in value. :** add stdc_leading_ones*() and stdc_leading_zeros*() to count leading 1 or 0 bits in value. :** add stdc_trailing_ones*() and stdc_trailing_zeros*() to count trailing 1 or 0 bits in value. :** add stdc_first_leading_one*() and stdc_first_leading_zero*() to find first leading bit with 1 or 0 in value. :** add stdc_first_trailing_one*() and stdc_first_trailing_zero*() to find first trailing bit with 1 or 0 in value. :** add stdc_has_single_bit*() to determine if value an exact power of 2 (return true if and only if there is a single 1 bit). :** add stdc_bit_floor*() to determine the largest integral power of 2 that is not greater than value. :** add stdc_bit_ceil*() to determine the smallest integral power of 2 that is not less than value. :** add stdc_bit_width*() to determine number of bits to represent a value. ;Standard Library (existing functions) :* add %b binary conversion specifier to printf() function family, prepending non-zero values with 0b, similar to how %x works. Implementations that previously didn't use %B as their own extension are encouraged to implement and prepend non-zero values with 0B, similar to how %X works. :* add %b binary conversion specifier to scanf() function family. :* add 0b and 0B binary conversion support to strtol() and wcstol() function families. :* make the functions
bsearch In computer science, binary search, also known as half-interval search, logarithmic search, or binary chop, is a search algorithm that finds the position of a target value within a sorted array. Binary search compares the target value to the ...
()
, bsearch_s(),
memchr The C programming language has a set of functions implementing operations on strings (character strings and byte strings) in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. F ...
()
,
strchr The C (programming language), C programming language has a set of functions implementing operations on String (computer science), strings (character strings and byte strings) in its C standard library, standard library. Various operations, such ...
()
,
strpbrk The C programming language has a set of functions implementing operations on strings (character strings and byte strings) in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. F ...
()
,
strrchr The C (programming language), C programming language has a set of functions implementing operations on String (computer science), strings (character strings and byte strings) in its C standard library, standard library. Various operations, such ...
()
,
strstr The C (programming language), C programming language has a set of functions implementing operations on String (computer science), strings (character strings and byte strings) in its C standard library, standard library. Various operations, such ...
()
, and their wide counterparts
wmemchr The C (programming language), C programming language has a set of functions implementing operations on String (computer science), strings (character strings and byte strings) in its C standard library, standard library. Various operations, such ...
()
, wcschr(), wcspbrk(),
wcsrchr The C (programming language), C programming language has a set of functions implementing operations on String (computer science), strings (character strings and byte strings) in its C standard library, standard library. Various operations, such ...
()
,
wcsstr The C programming language has a set of functions implementing operations on strings (character strings and byte strings) in its standard library. Various operations, such as copying, concatenation, tokenization and searching are supported. ...
()
return a const qualified object if one was passed to them. ;Preprocessor :* add and directives are essentially equivalent to and . Both directives were added to
C++23 C23 or C-23 may refer to: Vehicles ;Aircraft * Beechcraft C23 Musketeer, an American civil utility aircraft * Caspar C 23, a German sport aircraft * Caudron C.23, a French bomber biplane * Lockheed C-23 Altair, an American military transport * S ...
and GCC 12 too. :* add directive for binary resource inclusion. :* add directive for diagnostics. :* add allowing the availability of a header to be checked by preprocessor directives. :* add allowing the availability of an attribute to be checked by preprocessor directives. (see C++ compatibility group below for new attribute feature) :* add functional macro for
variadic macro A variadic macro is a feature of some computer programming languages, especially the C preprocessor, whereby a macro may be declared to accept a varying number of arguments. Variable-argument macros were introduced in 1999 in the ''ISO/IEC 9899: ...
s which expands to its argument only if a variadic argument has been passed to the containing macro. ;Types :* add type. :* add and types for bit-precise integers. Add macro for maximum bit width. Add ckd_add(), ckd_sub(), ckd_mul() macros for checked integer operations. :* Variably-modified types (but not
VLAs Vlas is both a surname and a given name. Notable people with the name include: *Adrian Vlas (born 1982), Romanian footballer *Valeriu Vlas (born 1971), Moldovan long-distance runner *Vlas Chubar (1891–1939), Ukrainian Bolshevik and Soviet politic ...
which are automatic variables allocated on the stack) become a mandatory feature. :* Standardization of the
typeof typeof, alternately also typeOf, and TypeOf, is an operator provided by several programming languages to determine the data type of a variable. This is useful when constructing programs that must accept multiple types of data without explicitly sp ...
(...)
operator. :* the meaning of the keyword was changed to cause
type inference Type inference refers to the automatic detection of the type of an expression in a formal language. These include programming languages and mathematical type systems, but also natural languages in some branches of computer science and linguistics ...
while also retaining its old meaning of a
storage class specifier Storage may refer to: Goods Containers * Dry cask storage, for storing high-level radioactive waste * Food storage * Intermodal container, cargo shipping * Storage tank Facilities * Garage (residential), a storage space normally used to store car ...
if used alongside a type. ;Constants :* add constant for nullptr_t type. :* add wb and uwb integer literal suffixes for and types, such as yields an unsigned _BitInt(3), and yields a signed _BitInt(4) which has three value bits and one sign bit. :* add 0b and 0B binary literal constant prefixes, such as (equating to 0xAA). :* add ' digit separator to literal constants, such as (equating to 0xFEDCBA98), (equating to 299792458), (equating to 1.414213562). :* add the ability to specify the underlying type of an
enum Telephone number mapping is a system of unifying the international telephone number system of the public switched telephone network with the Internet addressing and identification name spaces. Internationally, telephone numbers are systematically ...
. ;C++ compatibility :* add
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 ...
style
attribute Attribute may refer to: * Attribute (philosophy), an extrinsic property of an object * Attribute (research), a characteristic of an object * Grammatical modifier, in natural languages * Attribute (computing), a specification that defines a prope ...
syntax using double square brackets . Add attributes , , , and attribute for compatibility with
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 ...
, then deprecate , , header features introduced in
C11 C11, C.XI, C-11 or C.11 may refer to: Transport * C-11 Fleetster, a 1920s American light transport aircraft for use of the United States Assistant Secretary of War * Fokker C.XI, a 1935 Dutch reconnaissance seaplane * LET C-11, a license-build var ...
. Duplicate attributes are allowed for compatility with
C++23 C23 or C-23 may refer to: Vehicles ;Aircraft * Beechcraft C23 Musketeer, an American civil utility aircraft * Caspar C 23, a German sport aircraft * Caudron C.23, a French bomber biplane * Lockheed C-23 Altair, an American military transport * S ...
. :* add u8 prefix for
character literal A character literal is a type of literal in programming for the representation of a single character's value within the source code of a computer program. Languages that have a dedicated character data type generally include character literals; t ...
s to represent
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'' ...
encoding for compatibility with
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 ...
. :* add and preprocessing directives for compatibility with
C++23 C23 or C-23 may refer to: Vehicles ;Aircraft * Beechcraft C23 Musketeer, an American civil utility aircraft * Caspar C 23, a German sport aircraft * Caudron C.23, a French bomber biplane * Lockheed C-23 Altair, an American military transport * S ...
. (see preprocessor group above) ;Other :* Support for the ISO/IEC 60559:2020, the current version of the IEEE 754 standard for floating-point arithmetic, with extended binary floating-point arithmetic and (optional) decimal floating-point arithmetic. :* Single-argument _Static_assert. :*
Labels A label (as distinct from signage) is a piece of paper, plastic film, cloth, metal, or other material affixed to a container or product, on which is written or printed information or symbols about the product or item. Information printed dir ...
can appear before
declaration Declaration may refer to: Arts, entertainment, and media Literature * ''Declaration'' (book), a self-published electronic pamphlet by Michael Hardt and Antonio Negri * ''The Declaration'' (novel), a 2008 children's novel by Gemma Malley Music ...
s and at the end of compound statements. :* Unnamed parameters in function definitions. :* Better support for using
const In some programming languages, const is a type qualifier (a keyword applied to a data type) that indicates that the data is read-only. While this can be used to declare constants, in the C family of languages differs from similar constructs in ...
with arrays. :* Zero initialization with (including initialization of VLAs). :* , , , , , , become keywords. :* The
constexpr 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 ...
specifier for objects but not functions, unlike C++'s equivalent. :*
variadic functions In mathematics and in computer programming, a variadic function is a function of indefinite arity, i.e., one which accepts a variable number of arguments. Support for variadic functions differs widely among programming languages. The term ''va ...
no longer need a named argument before the ellipsis and the macro no longer needs a second argument nor does it evaluate any argument after the first one if present. :* add the type for storing
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 data and change the type of u8 character constants and string literals to . Also, the functions mbrtoc8() and c8rtomb() to convert a narrow multibyte character to UTF-8 encoding and a single code point from UTF-8 to a narrow multibyte character representation respectively. :* allow
storage class specifier Storage may refer to: Goods Containers * Dry cask storage, for storing high-level radioactive waste * Food storage * Intermodal container, cargo shipping * Storage tank Facilities * Garage (residential), a storage space normally used to store car ...
s to appear in compound literal definition.


Obsolete features

Some old obsolete features are either removed or deprecated: :* Remove Trigraphs. :* Remove K&R function definitions/declarations. :* Remove representations for signed integers other than two's complement.
Two's complement Two's complement is a mathematical operation to reversibly convert a positive binary number into a negative binary number with equivalent (but negative) value, using the binary digit with the greatest place value (the leftmost bit in big- endian ...
signed integer representation will be required. :* The macros in are obsolescent features.


Compiler support

The GCC 9,
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), ...
9.0, and
Pelles C The Fisher King is a figure in Arthurian legend, the last in a long line of British kings tasked with guarding the Holy Grail. The Fisher King is both the protector and physical embodiment of his lands, but a wound renders him incapable and hi ...
11.00 compilers implement an experimental compiler flag to support this standard.


See also

*
C++23 C23 or C-23 may refer to: Vehicles ;Aircraft * Beechcraft C23 Musketeer, an American civil utility aircraft * Caspar C 23, a German sport aircraft * Caudron C.23, a French bomber biplane * Lockheed C-23 Altair, an American military transport * S ...
,
C++20 C++20 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++20 replaced the prior version of the C++ standard, called C++17. The standard was technically finalized by WG21 at the meeting in Prague in February 2020, a ...
,
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 August ...
,
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 Airport (F ...
, 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


C Working Group WG14 Documents

N3088, draft of C23 standard (January 2023)
{{C programming language C (programming language) Programming language standards