c(7): Add C23 standard update

Reviewed by: 	emaste, Graham Percival <gperciva@tarsnap.com>
Pull Request:	https://github.com/freebsd/freebsd-src/pull/1507
Signed-off-by: Faraz Vahedi <kfv@kfv.io>
This commit is contained in:
Faraz Vahedi
2024-11-02 01:08:36 +03:30
committed by Brooks Davis
parent 7e98eae740
commit 930654318e
3 changed files with 160 additions and 15 deletions
+3
View File
@@ -51,6 +51,9 @@
# xargs -n1 | sort | uniq -d;
# done
# 20241104: remove the outdated c2x.7 symlink in favor of c23.7
OLD_FILES+=usr/share/man/man7/c2x.7.gz
# 20241023: new clang import which bumps version from 18 to 19
OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_builtin_vars.h
OLD_FILES+=usr/lib/clang/18/include/__clang_cuda_cmath.h
+2 -1
View File
@@ -42,7 +42,8 @@ MLINKS+= c.7 c95.7
MLINKS+= c.7 c99.7
MLINKS+= c.7 c11.7
MLINKS+= c.7 c17.7
MLINKS+= c.7 c2x.7
MLINKS+= c.7 c23.7
MLINKS+= c.7 c2y.7
.if ${MK_INET} != "no"
MAN+= networking.7
+155 -14
View File
@@ -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
@@ -239,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.
@@ -377,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 .
@@ -384,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.