git: 930654318ece - main - c(7): Add C23 standard update
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 04 Nov 2024 17:03:08 UTC
The branch main has been updated by brooks:
URL: https://cgit.FreeBSD.org/src/commit/?id=930654318ecee172e4fc1ce57f21b4fb7b12603e
commit 930654318ecee172e4fc1ce57f21b4fb7b12603e
Author: Faraz Vahedi <kfv@kfv.io>
AuthorDate: 2024-11-01 21:38:36 +0000
Commit: Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2024-11-04 16:40:52 +0000
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>
---
ObsoleteFiles.inc | 3 +
share/man/man7/Makefile | 3 +-
share/man/man7/c.7 | 169 ++++++++++++++++++++++++++++++++++++++++++++----
3 files changed, 160 insertions(+), 15 deletions(-)
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index d9a8467443da..142a389a8e7a 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -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
diff --git a/share/man/man7/Makefile b/share/man/man7/Makefile
index 67cca438a46d..2c4f158280f7 100644
--- a/share/man/man7/Makefile
+++ b/share/man/man7/Makefile
@@ -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
diff --git a/share/man/man7/c.7 b/share/man/man7/c.7
index 7c180797d296..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
@@ -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.