سی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
ویژگیهای جدید کتابخانه
[ویرایش]- توابع ریاضی ممیز شناور باینری توسعهیافته
- توابع ریاضی ممیز شناور اعشاری
- انواع -
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 برای انواع عدد صحیح بدون علامت
- اصلاحکننده طول 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_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
منابع
[ویرایش]- ↑ "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".