سی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 برای توابع ریاضی ممیز شناور موجود و جدیدquantizedNsamequantumdNquantumdNllquantexpdNencodedecdNdecodedecdNencodebindNdecodebindN
- توابع قالب بندی ممیز شناور
- پشتیبانی کتابخانه از UTF-8
- آلیاس
char8_t mbrtoc8c8rtomb- آلیاس
atomic_char8_t - ماکرو آزمایشی
ATOMIC_CHAR8_T_LOCK_FREE
- آلیاس
- توابع POSIX
memccpystrdupstrndupgmtime_rlocaltime_r- اکستنشنهایی برای
strftimeوwcsftime
- اکستنشنهایی برای خانوادههای تابع
fscanfوfprintf.- اصلاحکننده طول wN و wfN به ترتیب برای
[u]intN_tو[u]int_fastN_t - اصلاحکنندههای طول H, D و DD به ترتیب برای
_Decimal32،_Decimal64و_Decimal128 - مشخصکننده تبدیل b برای انواع عدد صحیح بدون علامت
- اصلاحکننده طول wN و wfN به ترتیب برای
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_definedstatic_assertدیگر به عنوان یک ماکرو در<assert.h>ارائه نمیشود (به یک کلمهکلیدی تبدیل میشود)thread_localدیگر به عنوان یک ماکرو در
! reads.h | ارائه نمیشود (به یک کلمهکلیدی تبدیل میشود)
منسوخشده
<stdnoreturn.h>- ماکروهای تست ویژگی قدیمی
__STDC_IEC_559____STDC_IEC_559_COMPLEX__
- _مشخص کننده تابع
Noreturn_ - توکن اتریبیوت
Noreturn_ asctimectimeDECIMAL_DIG- تعریف ماکروهای لیمیت عددی زیر در
<math.h>(باید با<limits.h>استفاده شوند)INFINITYDEC_INFINITYNANDEC_NAN
__bool_true_false_are_defined
منابع
- ↑ "History of C". cppreference.
- ↑ Keaton, David (2016-09-19). "WG 14 N 2086 -- C2x Charter". www.open-std.org. Retrieved 2021-01-03.
- ↑ "Revised C23 Schedule WG 14 N 2759" (PDF). www.open-std.org. Retrieved 2021-06-19.
- ↑ "Proposal for C2x WG14 N2480" (PDF). www.open-std.org.
- ↑ "C2x Proposal: WG14 N2607" (PDF). www.open-std.org.
- ↑ Meneide, JeanHeyd (2022-01-01). "Not-So-Magic - typeof(…) in C". Retrieved 2022-03-25.
- ↑ Gustedt, Jens (2022-02-16). "Make false and true first-class language features v8" (PDF). Retrieved 2022-05-26.
- ↑ Gustedt, Jens; Meneide, JeanHeyd (2022-07-22). "Introduce the nullptr constant". Retrieved 2022-09-01.
- ↑ "GCC 9 Changes". GCC 9 Release Notes.
- ↑ "Add a new language mode for C2x". LLVM Project Repository.
- ↑ "major changes between 10.00 and 11.00".