سی2x

C2x نام غیررسمی ویرایش بعدی استاندارد زبان C (پس از C17) است. انتظار می‌رود در سال ۲۰۲۳ این نسخه از استاندارد، به‌طور کامل منتشر شود.

سربرگ‌های جدید 
 <stdbit.h>
 <stdckdint.h>

ویژگی‌های جدید زبان 
تغییرات ادغام‌شده در آخرین پیش‌نویس عبارتند از:
 پشتیبانی از ISO/IEC 60559:2020، نسخه فعلی استاندارد IEEE 754 برای محاسبات ممیز شناور، با محاسبات ممیز شناور باینری توسعه‌یافته و محاسبات ممیز شناور اعشاری (اختیاری)
 _Static_Assert تک‌آرگومانی
 اتریبیوت‌هایی (ویژگی) همانند C++11 و اتریبیوت‌های nodiscard ، maybe_unused ، deprecated و fallthrough و noreturn و reproducible و unsequenced
 memccpy, strdup, strndup – مشابه توابع موجود در اکستنشن‌های POSIX و SVID C
 نمایش عدد صحیح امضاشدهٔ مکمل دو الزامی شده‌است
 لیبل‌ها می‌توانند قبل از اعلان‌ها و در انتهای عبارات ترکیبی ظاهر شوند
 پارامترهای بی‌نام در تعاریف تابع
 ثابت‌های دودویی مانند 0b10101010 و مشخص‌کننده تبدیل %b برای خانواده printf
 پشتیبانی بهتر برای استفاده از const با آرایه‌ها
 نوع توابع عمومی برای انجام محاسبات اعداد صحیح بررسی‌شده (سرریز عدد صحیح)
 _BitInt(N) و unsigned _BitInt(N) برای اعداد صحیح bit-precise
 #elifdef و #elifndef
 جداکننده ارقام: 0xFF'FF'FF'FF
 استانداردسازی typeof(...) (typof)
 انواع Variably-modified (اما نه VLAها که متغیرهای خودکار تخصیص داده شده در پشته هستند) به یک ویژگی اجباری تبدیل می‌شوند.
 مقداردهی اولیه با {} (شامل مقداردهی اولیه VLAها)
 alignas, alignof, bool, true, false, static_assert, thread_local به کلمات کلیدی تبدیل می‌شوند
 true و false به کلمات کلیدی تبدیل می‌شوند (ممکن است به دلایل سازگاری، ماکروهای از پیش‌تعریف‌شده شوند)
 memset_explicit برای پاک‌کردن داده‌های حساس
 #embed برای گنجاندن منابع باینری
 #warning
 ثابت nullptr و نوع nullptr_t مرتبط
 پراگما جهت گرد کردن: STDC FENV_ROUND و STDC FENV_DEC_ROUND

ویژگی‌های جدید کتابخانه 
 توابع ریاضی ممیز شناور باینری توسعه‌یافته
 توابع ریاضی ممیز شناور اعشاری
 انواع -dN برای توابع ریاضی ممیز شناور موجود و جدید
 quantizedN
 samequantumdN
 quantumdN
 llquantexpdN
 encodedecdN
 decodedecdN
 encodebindN
 decodebindN
 توابع قالب بندی ممیز شناور
 پشتیبانی کتابخانه از UTF-8
 آلیاس char8_t
 mbrtoc8
 c8rtomb
 آلیاس atomic_char8_t
 ماکرو آزمایشی ATOMIC_CHAR8_T_LOCK_FREE
 توابع POSIX
 memccpy
 strdup
 strndup
 gmtime_r
 localtime_r
 اکستنشن‌هایی برای strftime و wcsftime
 اکستنشن‌هایی برای خانواده‌های تابع fscanf و fprintf.
 اصلاح‌کننده طول wN و wfN به ترتیب برای [u]intN_t و [u]int_fastN_t
 اصلاح‌کننده‌های طول H, D و DD به ترتیب برای _Decimal32، _Decimal64 و _Decimal128
 مشخص‌کننده تبدیل b برای انواع عدد صحیح بدون علامت
 timespec_getres
 ثابت‌های ماکرو برای عرض انواع اعداد صحیح
 ماکروهای محدود عددی اضافی برای انواع ممیز شناور
 ماکروهای تستِ نسخه:
 __STDC_VERSION_FENV_H__
 __STDC_VERSION_MATH_H__
 __STDC_VERSION_STDINT_H__
 __STDC_VERSION_STDLIB_H__
 __STDC_VERSION_TGMATH_H__
 __STDC_VERSION_TIME_H__
 __STDC_VERSION_STDCKDINT_H__
 __STDC_VERSION_STDBIT_H__

پشتیبانی 
کامپایلرهای GCC 9، Clang 9.0، و Pelles C 11.00 فلگ (پرچم) کامپایلر آزمایشی را برای پشتیبانی از این استاندارد پیاده‌سازی می‌کنند.

ویژگی‌های منسوخ‌شده 
برخی از ویژگی‌های قدیمی، یا حذف‌شده یا منسوخ شده‌اند.

حذف‌شده 
 حذف تعاریف تابع به شیوه K&R
 نمایش اعداد صحیح امضا شده به غیر از مکمل دو
 اجازه دادن به ثابت‌های کاراکتر با پیشوند u/U و لیترال‌های رشته‌ای که ممکن است UTF-16/32 نباشند
 سلسله لیترال‌های رشته گسترده مخلوط‌شده
 پشتیبانی از فراخوانی realloc با اندازه صفر (با رفتار تعریف‌نشده (UB) مواجه می‌شوید)
__alignof_is_defined و __alignas_is_defined
static_assert دیگر به عنوان یک ماکرو در <assert.h> ارائه نمی‌شود (به یک کلمه‌کلیدی تبدیل می‌شود)
thread_local دیگر به عنوان یک ماکرو در <threads.h> ارائه نمی‌شود (به یک کلمه‌کلیدی تبدیل می‌شود)

منسوخ‌شده 
 <stdnoreturn.h>
 ماکروهای تست ویژگی قدیمی
 __STDC_IEC_559__
 __STDC_IEC_559_COMPLEX__
 _مشخص کننده تابع Noreturn_
 توکن اتریبیوت Noreturn_
 asctime
 ctime
 DECIMAL_DIG
 تعریف ماکروهای لیمیت عددی زیر در <math.h> (باید با <limits.h> استفاده شوند)
 INFINITY
 DEC_INFINITY
 NAN
 DEC_NAN
 __bool_true_false_are_defined

منابع

پیوند به بیرون 
 اسناد گروه کاری C WG14
 N3054، پیش‌نویس استاندارد (سپتامبر ۲۰۲۲)