C2x نام غیررسمی ویرایش بعدی استاندارد زبان C (پس از C17) است.[۱][۲] انتظار میرود در سال ۲۰۲۳ این نسخه از استاندارد، بهطور کامل منتشر شود.[۳]
سربرگهای جدید
ویژگیهای جدید زبان
تغییرات ادغامشده در آخرین پیشنویس عبارتند از:
- پشتیبانی از 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
ویژگیهای جدید کتابخانه
- توابع ریاضی ممیز شناور باینری توسعهیافته
- توابع ریاضی ممیز شناور اعشاری
- انواع -
d
N برای توابع ریاضی ممیز شناور موجود و جدید
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
دیگر به عنوان یک ماکرو در
! reads.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
منابع
پیوند به بیرون