C23

C23  este numele neoficial al următorului standard (după C17 ) al limbajului C. [1] [2] Este de așteptat să fie adoptat în 2023 și, prin urmare, se va numi C23 . [3]

Modificări de la C17 [4]

Schimbări de limbă

Caracteristici depreciate și eliminate
  • Arhitectura trebuie să suporte în mod necesar numerele de complement doi.
  • Definiții ale funcției de stil K&R
  • Definiția acestor macrocomenzi în < math.h > (mutat în < limits.h >)
    • INFINIT
    • DEC_INFINITY
    • NAN
    • DEC_NAN
  • Atributul No_return
  • Suportă apelarea realloc cu 0 dimensiuni ( comportament nedefinit acum ).
  • Macro-urile __bool_true_false_are_defined
  • Macro-ul __alignof_is_defined și __alignas_is_defined
Inovații Noi directive de preprocesor
  • #încorporare
  • #elifdef și #elifndef
  • #avertizare
  • Suport pentru ISO/IEC 60559:2020, versiunea actuală a standardului IEEE 754 pentru aritmetica în virgulă mobilă
  • Tipurile sunt _Decimal 32, _Decimal64 și _Decimal128.
  • Suport _static_assert
  • Atributele funcției de stil C++11 :

nodiscard

maybe_unused

deprecated

fallthrough

noreturn

reproductibilă

unsequenced

  • Aritmetică îmbunătățită față de numerele binare și zecimale
  • Etichetele pot apărea înaintea declarațiilor și la sfârșitul expresiilor
  • Parametri nenumiți în declarațiile de funcție [5]
  • Literale binar ca0b10101010
  • Suport const îmbunătățit cu matrice [6]
  • Abilitatea de a controla depășirea întregului
  • Типы _BitInt(N)șiUnsignedBitInt(N)
  • Separatoare de cifre: 0xFF'FF'FF'FF
  • Standardizare operator typeof(...)( tip de ) [7]
  • Inițializare goală cu {} (inclusiv inițializarea VLA)
  • alignas, alignof, bool, true, false, static_assert, thread_local sunt acum cuvinte cheie
  • pragma pentru direcția de rotunjire
    • FENV_ROUND
    • FENV_DEC_ROUND

Modificări ale bibliotecii standard

Fișiere antet noi
  • stdbit.h
  • stdckdint.h
  • Unele funcții POSIX devin standard
    • memccpy()
    • strdup()
    • strndup()
    • asctime_r()
    • ctime_r()
    • gmtime_r()
    • localtime_r()
  • Suport UTF8
    • aliaschar8_t
    • mbrtoc8()
    • c8rtomb()
    • aliasatomic_char8_t
    • macroATOMIC_CHAR8_T_LOCK_FREE
  • Extensii pentru fscanf, fprintf
    • Specificator %bpentru ieșirea numerelor binare
    • H,D,DD pentru _Decimal32, _Decimal64 și, respectiv, _Decimal128.

Suport

Posibilitate Oferta nr. GCC Zăngăni MSVC
_Aserțiune_statică 2265 9 9
Atribute 2554 zece 9
Zecimal 2341 4,2*
Constante binare 2549 4.3

unsprezece

2.9

9

19,0**
Etichete înainte de anunț 2508 unsprezece Parţial*
__are_c_atribut 2553 unsprezece 9
Separatoare de cifre 2626 12 13 19**
#elifdef,

#elifndef

2645 12 13
Declarație de funcție în stil K&R 2432 zece cincisprezece
Parametrii funcției fără nume 2480 unsprezece unsprezece

Note

  1. ↑ Istoria lui C. cppreferință . Preluat la 27 aprilie 2022. Arhivat din original la 24 octombrie 2020.
  2. Keaton, David WG 14 N 2086 -- Carta C2x . www.open-std.org (19 septembrie 2016). Preluat la 3 ianuarie 2021. Arhivat din original la 14 februarie 2021.
  3. Programul C23 revizuit WG 14 N 2759 . www.open-std.org . Preluat la 19 iunie 2021. Arhivat din original la 24 iunie 2021.
  4. C23 - cppreference.com . en.cppreference.com . Preluat la 10 iulie 2022. Arhivat din original la 8 iunie 2022.
  5. Propunere pentru C2x WG14 N2480 . www.open-std.org . Preluat la 27 aprilie 2022. Arhivat din original la 20 ianuarie 2022.
  6. Propunerea C2x: WG14 N2607 . www.open-std.org . Preluat la 27 aprilie 2022. Arhivat din original la 9 februarie 2022.
  7. Meneide, JeanHeyd Not-So-Magic - typeof(…) in C (1 ianuarie 2022). Preluat la 25 martie 2022. Arhivat din original la 8 martie 2022.

Link -uri