Talk:C23 (C standard revision)

Latest comment: 1 month ago by Birdfern in topic N3220, N3219, N3096

timegm() function

edit

"ISO/IEC 9899:2023 (E) working draft — April 1, 2023" implies `timegm()` is new. Perhaps add that to this wiki too. 2601:441:8002:C00:887D:3B67:CDBB:FE8B (talk) 18:09, 9 June 2023 (UTC)Reply

  DoneSbmeirowTalk23:44, 9 June 2023 (UTC)Reply

List of items that may not yet be covered by article

edit

NOTE: moved long hidden comment from article to talk page. Editors need to remove from this list all items that are currently in the article, then compare remaining items against C23 Draft release to determine what this article is missing. I'm guessing this list contains some proposed items that didn't make it into C23. • SbmeirowTalk • 00:13, 10 June 2023 (UTC) • SbmeirowTalk00:13, 10 June 2023 (UTC)Reply

hide the following until references can be added

Type generic functions for performing checked integer arithmetic (Integer overflow).[citation needed] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2683.pdf ?

Pragmas for rounding direction: STDC FENV_ROUND and STDC FENV_DEC_ROUND.[citation needed]

atomic_char8_t type alias

ATOMIC_CHAR8_T_LOCK_FREE test macro

Seems regular binary floating point (IEEE-754), is actually optional! Not just for newer decimal:

Feature test macros for optional features

__STDC_IEC_60559_BFP__ Indicates IEEE-754 binary floating-point arithmetic and required math functions are supported. This macro supersedes __STDC_IEC_559__.

__STDC_IEC_60559_DFP__ Indicates IEEE-754 decimal floating-point arithmetic and required math functions are supported.

__STDC_IEC_60559_COMPLEX__ Indicates IEEE-754 complex arithmetic and required math functions are supported. This macro supersedes __STDC_IEC_55

Obsolete

Removed

Permission that u/U-prefixed character constants and string literals may be not UTF-16/32

Mixed wide string literal concatenation

Support for calling realloc() with zero size (the behavior becomes undefined)

__alignof_is_defined and __alignas_is_defined

Deprecated

Old feature-test macros

  • __STDC_IEC_559__
  • __STDC_IEC_559_COMPLEX__

asctime()

ctime()

DECIMAL_DIG

Definition of following numeric limit macros in <math.h> (they should be used via <limits.h>)

INFINITY

DEC_INFINITY

NAN

DEC_NAN

__bool_true_false_are_defined

New language features

  • Unnamed parameters in function definitions
  • Identical cvr-qualifications for array types and their element types
  • Pragmas for rounding direction: STDC FENV_ROUND, STDC FENV_DEC_ROUND

New library features

  • Extended binary floating-point math functions

This section is incomplete

Reason: List TBD

Decimal floating-point math functions

-dN variants for existing and new floating-point math functions

quantizedN()

samequantumdN()

quantumdN()

llquantexpdN()

encodedecdN()

decodedecdN()

encodebindN()

decodebindN()

Floating-point formatting functions

POSIX functions

memccpy()

strdup()

strndup()

gmtime_r()

localtime_r()

Extensions for strftime() and wcsftime()

Extensions for fscanf() and fprintf() function families

wN and wfN length modifiers for [u]intN_t and [u]int_fastN_t respectively

H, D, and DD length modifiers for _Decimal32, _Decimal64, and _Decimal128 respectively

b conversion specifier for unsigned integer types

timespec_getres()

Macro constants for width of integer types

Additional numeric limit macros for floating-point types

Library version-test macros

__STDC_VERSION_FENV_H__

__STDC_VERSION_MATH_H__

__STDC_VERSION_STDINT_H__

__STDC_VERSION_STDLIB_H__

__STDC_VERSION_TGMATH_H__

__STDC_VERSION_TIME_H__ Obsolete

Removed

Old-style function declarations and definitions

Representations for signed integers other than two's complement

Permission that u/U-prefixed character constants and string literals may be not UTF-16/32

Mixed wide string literal concatenation

Support for calling realloc() with zero size (the behavior becomes undefined)

__alignof_is_defined and __alignas_is_defined

Deprecated

Old feature-test macros

__STDC_IEC_559__

__STDC_IEC_559_COMPLEX__

_Noreturn function specifier

_Noreturn attribute token

asctime()

ctime()

DECIMAL_DIG

Definition of following numeric limit macros in <math.h> (they should be used via <limits.h>)

INFINITY

DEC_INFINITY

NAN

DEC_NAN

__bool_true_false_are_defined

New language features

Decimal floating-point types (_Decimal32, _Decimal64, and _Decimal128)

Bit-precise integers (_BitInt(N))

Binary integer constants

u8 character constants

Type change of u8 string literals

Digit separator '

Empty initializer = {}

Attributes

deprecated

fallthrough

maybe_unused

nodiscard

noreturn

Unnamed parameters in function definitions

Identical cvr-qualifications for array types and their element types

Single-argument _Static_assert

Labels followed by declarations and }

nullptr constant and the associated nullptr_t type

true and false become keywords (may be predefined macros for compatibility reasons)

New library features

Extended binary floating-point math functions

This section is incomplete

Reason: List TBD

Decimal floating-point math functions

-dN variants for existing and new floating-point math functions

quantizedN()

samequantumdN()

quantumdN()

llquantexpdN()

encodedecdN()

decodedecdN()

encodebindN()

decodebindN()

Floating-point formatting functions

Library support for UTF-8

char8_t type alias

mbrtoc8()

c8rtomb()

atomic_char8_t type alias

ATOMIC_CHAR8_T_LOCK_FREE test macro

POSIX functions

memccpy()

strdup()

strndup()

gmtime_r()

localtime_r()

Extensions for strftime() and wcsftime()

Extensions for fscanf() and fprintf() function families

wN and wfN length modifiers for [u]intN_t and [u]int_fastN_t respectively

H, D, and DD length modifiers for _Decimal32, _Decimal64, and _Decimal128 respectively

b conversion specifier for unsigned integer types

timespec_getres()

Macro constants for width of integer types

Additional numeric limit macros for floating-point types

Library version-test macros

__STDC_VERSION_FENV_H__

__STDC_VERSION_MATH_H__

__STDC_VERSION_STDINT_H__

__STDC_VERSION_STDLIB_H__

__STDC_VERSION_TGMATH_H__

__STDC_VERSION_TIME_H__

Draft standard renamed to "C2y"

edit

In the June 2024 working draft, the draft language standard was renamed from "C23" to "C2y". 209.183.136.7 (talk) 21:13, 15 September 2024 (UTC)Reply

Note that wikipedia will not allow me to link to the June 2024 draft standard. However, you can find it by doing a web search on these keywords: open-std JTC1 SC22 WG14 n3301 209.183.136.7 (talk) 21:16, 15 September 2024 (UTC)Reply
Doc N3301 (which is actually from July) is a draft for the next edition after C23, currently nicknamed "C2y". At some point a new Wikipedia article for that edition will be needed, but there's been no change in the common name of C23. See Annex M of the doc, page 690 (PDF page 705), which says "Major changes in this sixth edition (__STDC_VERSION__ 202ymmL) include: [a very short list so far] ... Major changes in this fifth edition (__STDC_VERSION__ 202311L) include: [the long list of C23 changes]". Birdfern (talk) 05:23, 17 September 2024 (UTC)Reply

N3220, N3219, N3096

edit

I've added a "Further reading" link to the public working draft N3220 that shares its date with the draft C23 standard N3219, as well as a short section explaining how N3220 relates to N3219 and how the previous public working draft N3096 differs from them both.

I see in the page's history that several editors have previously tried to just replace references to N3096 with references to N3220, and those have been reverted. It looks like those previous editors didn't really give any explanation of why N3220 was relevant. I hope the text I added, and its citations, makes the story clearer.

In particular, N3220 differs from N3219 (which is the official draft of the C23 standard) by adding just one clarifying word in one footnote in an annex. That makes it a nearly 100% perfect approximation of the draft C23 standard. I interpret the publication of N3220 — with such a spectacularly tiny diff from the non-public N3219 — as the WG14 editors doing their darndest to go absolutely right up to the line in order to make the standard all but public, while staying just short of breaching the rules that the ISO sets for them. Admirable work! Greg Price (talk) 06:24, 8 October 2024 (UTC)Reply

Thanks for these edits. I've changed the lede to point people straight to this more useful draft. Birdfern (talk) 18:08, 8 October 2024 (UTC)Reply