diff options
Diffstat (limited to 'share/man/man7/c.7')
-rw-r--r-- | share/man/man7/c.7 | 237 |
1 files changed, 203 insertions, 34 deletions
diff --git a/share/man/man7/c.7 b/share/man/man7/c.7 index 97869fe0f8f2..c95bab1c1f19 100644 --- a/share/man/man7/c.7 +++ b/share/man/man7/c.7 @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd April 20, 2021 +.Dd November 4, 2024 .Dt C 7 .Os .Sh NAME @@ -34,7 +34,8 @@ .Nm c99 , .Nm c11 , .Nm c17 , -.Nm c2x +.Nm c23 , +.Nm c2y .Nd The C programming language .Sh DESCRIPTION C is a general purpose programming language, which has a strong connection @@ -112,9 +113,12 @@ development of the language did not stop. .Pp The ISO C standard was later extended with an amendment as ISO/IEC 9899/AMD1 in 1995. -This contained, for example, the wide-character support in <wchar.h> and -<wctype.h>, and also restricted character set support via diagraphs and -<iso646.h>. +This contained, for example, the wide-character support in +.In wchar.h +and +.In wctype.h , +and also restricted character set support via diagraphs and +.In iso646.h . This amendment is usually referred to as C95. Two technical corrigenda were also published: Technical Corrigendum 1 as ISO/IEC 9899/COR1 in 1994 and Technical Corrigendum 2 as ISO/IEC 9899/COR2 @@ -130,18 +134,23 @@ The improvements include (but are not limited to) the following: .Bl -bullet -offset indent .It digraphs, trigraphs, and alternative spellings for the operators that -use non-ISO646 characters in <iso646.h> +use non-ISO646 characters in +.In iso646.h .It -extended multibyte and wide character library support in <wchar.h> and -<wctype.h> +extended multibyte and wide character library support in +.In wchar.h +and +.In wctype.h .It variable length arrays .It flexible array members .It -complex (and imaginary) number arithmetic support in <complex.h> +complex (and imaginary) number arithmetic support in +.In complex.h .It -type-generic math macros in <tgmath.h> +type-generic math macros in +.In tgmath.h .It the long long int type and library functions .It @@ -157,15 +166,24 @@ BCPL style single-line comments .It allow mixed declarations and code .It -the vscanf family of functions in <stdio.h> and <wchar.h> +the +.Fn vscanf +family of functions in +.In stdio.h +and +.In wchar.h .It allow trailing comma in enum declaration .It inline functions .It -the snprintf family of functions in <stdio.h> +the +.Fn snprintf +family of functions in +.In stdio.h .It -boolean type and macros in <stdbool.h> +boolean type and macros in +.In stdbool.h .It empty macro arguments .It @@ -173,7 +191,8 @@ _Pragma preprocessing operator .It __func__ predefined identifier .It -va_copy macro in <stdarg.h> +va_copy macro in +.In stdarg.h .It additional strftime conversion specifiers .El @@ -185,24 +204,34 @@ and ISO/IEC 9899:1999/COR3:2007. The improvements include (but are not limited to) the following: .Bl -bullet -offset indent .It -support for multiple threads of execution and atomic operations in <threads.h> -and <stdatomic.h> +support for multiple threads of execution and atomic operations in +.In threads.h +and +.In stdatomic.h .It -additional floating-point characteristic macros in <float.h> +additional floating-point characteristic macros in +.In float.h .It -querying and specifying alignment of objects in <stdalign.h> and <stdlib.h> +querying and specifying alignment of objects in +.In stdalign.h +and +.In stdlib.h .It -Unicode character types and functions in <uchar.h> +Unicode character types and functions in +.In uchar.h .It type-generic expressions .It -static assertions in <assert.h> +static assertions in +.In assert.h .It anonymous structures and unions .It -remove the gets function from <stdio.h> +remove the gets function from +.In stdio.h .It -add the aligned_alloc, at_quick_exit, and quick_exit functions in <stdlib.h> +add the aligned_alloc, at_quick_exit, and quick_exit functions in +.In stdlib.h .El .Pp C11 was later superseded by ISO/IEC 9899:2018, also known as C17 which was @@ -211,17 +240,154 @@ It incorporates the Technical Corrigendum 1 (ISO/IEC 9899:2011/COR1:2012) which was published in 2012. It addressed defects and deficiencies in C11 without introducing new features, only corrections and clarifications. -Since there were no major changes in C17, the current standard for -Programming Language C, is still considered C11 \(em ISO/IEC 9899:2011, published -2011-12-08. .Pp -The next standard, the fifth, is currently referred to as C2x and is scheduled -to be adopted by the end of 2021, with a publication date of 2022. -When published, it will cancel and replace the fourth edition, ISO/IEC -9899:2018. +C23, formally ISO/IEC 9899:2024, is the current standard with significant +updates that supersede C17 (ISO/IEC 9899:2018). +The standardization effort began in 2016, informally as C2x, with the first +WG14 meeting in 2019, and was officially published on October 31, 2024. +C23 was originally anticipated for an earlier release, but the timeline was +extended due to COVID-19 pandemic. +With C23, the value of __STDC_VERSION__ has been updated from 201710L to +202311L. +Key changes include (but are not limited to) the following: +.Bl -bullet -offset indent +.It +Add null pointer type nullptr_t and the nullptr keyword +.It +Add constexpr keyword as a storage-class specifier for objects +.It +Redefine the usage of the auto keyword to support type inference while also +retaining its previous functionality as a storage-class specifier when used +with a type +.It +Add %b binary conversion specifier to the +.Fn printf +and +.Fn scanf +function families +.It +Add binary conversion support (0b and 0B) to the +.Fn strtol +and +.Fn wcstol +function families +.It +Add the #embed directive for binary resource inclusion and __has_embed to +check resource availability with preprocessor directives +.It +Add the #warning directive for diagnostics +.It +Add the #elifdef and #elifndef directives +.It +Add the u8 prefix for character literals to represent UTF-8 encoding, +compatible with C++17 +.It +Add the char8_t type for UTF-8 encoded data and update the types of u8 +character constants and string literals to char8_t +.It +Add functions +.Fn mbrtoc8 +and +.Fn c8rtomb +to convert between narrow multibyte +characters and UTF-8 encoding +.It +Define all char16_t strings and literals as UTF-16 encoded and char32_t +strings and literals as UTF-32 encoded unless specified otherwise +.It +Allow storage-class specifiers within compound literals +.It +Support the latest IEEE 754 standard, ISO/IEC 60559:2020, with binary and +(optional) decimal floating-point arithmetic +.It +Add single-argument _Static_assert for compatibility with C++17 +.It +Add _Decimal32, _Decimal64, _Decimal128 keywords for (optional) decimal +floating-point arithmetic +.It +Add digit separator ' (the single quote character) for literals +.It +Enable specification of the underlying type of an enum +.It +Standardize the +.Fn typeof +operator +.It +Add +.Fn memset_explicit +in +.In string.h +to securely erase sensitive data +regardless of optimizations +.It +Add +.Fn memccpy +in +.In string.h +for efficient string concatenation +.It +Add +.Fn memalignment +in +.In stdlib.h +to determine pointer alignment +.It +Add +.Fn strdup +and +.Fn strndup +in +.In string.h +to allocate string copies +.It +Introduce bit utility functions, macros, and types in the new header +.In stdbit.h +.It +Add +.Fn timegm +in +.In time.h +for converting time structures to calendar time +values +.It +Add __has_include for header availability checking via preprocessor +directives +.It +Add __has_c_attribute to check attribute availability via preprocessor +directives +.It +Add _BitInt(N) and unsigned _BitInt(N) for bit-precise integers, and +BITINT_MAXWIDTH for maximum bit width +.It +Elevate true and false to proper keywords (previously macros from +.In stdbool.h ) +.It +Add keywords alignas, alignof, bool, static_assert, thread_local; previously +defined keywords remain available as alternative spellings +.It +Enable zero initialization with {} (including initialization of VLAs) +.It +Introduce C++11 style attributes using [[]], with adding [[deprecated]], +[[fallthrough]], [[maybe_unused]], [[nodiscard]], and [[noreturn]] +.It +Deprecate _Noreturn, noreturn, header +.In stdnoreturn.h +features introduced +in C11 +.It +Remove trigraph support +.It +Remove K&R function definitions and declarations +.It +Remove non-two's-complement representations for signed integers +.El .Pp -Some useful features have been provided as extensions by some compilers, but -they cannot be considered as standard features. +The next version of the C Standard, informally named C2y, is anticipated +to release within the next six years, targeting 2030 at the latest. +A charter for C2y is still being drafted and discussed, with several +papers under debate from the January 2024 meeting in Strasbourg, France +indicating that this new version may address long-standing requests and +deficiencies noted by the C community, while preserving its core strengths. .Pp ISO/IEC JTC1/SC22/WG14 committee is responsible for the ISO/IEC 9899, C Standard. @@ -349,6 +515,11 @@ C Standard. .%A ISO/IEC .%T 9899:2018 (aka C17) .Re +.Pp +.Rs +.%A ISO/IEC +.%T 9899:2024 (aka C23) +.Re .Sh HISTORY This manual page first appeared in .Fx 9.0 . @@ -356,8 +527,6 @@ This manual page first appeared in .An -nosplit This manual page was originally written by .An Gabor Kovesdan Aq Mt gabor@FreeBSD.org . -It was updated for -.Fx 14.0 -by +It was updated by .An Faraz Vahedi Aq Mt kfv@kfv.io with information about more recent C standards. |