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:
committed by
Brooks Davis
parent
7e98eae740
commit
930654318e
@@ -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
|
||||
|
||||
@@ -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
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user