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[۹] 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

منابع ویرایش

  1. "History of C". cppreference.
  2. Keaton, David (2016-09-19). "WG 14 N 2086 -- C2x Charter". www.open-std.org. Retrieved 2021-01-03.
  3. "Revised C23 Schedule WG 14 N 2759" (PDF). www.open-std.org. Retrieved 2021-06-19.
  4. "Proposal for C2x WG14 N2480" (PDF). www.open-std.org.
  5. "C2x Proposal: WG14 N2607" (PDF). www.open-std.org.
  6. Meneide, JeanHeyd (2022-01-01). "Not-So-Magic - typeof(…) in C". Retrieved 2022-03-25.
  7. Gustedt, Jens (2022-02-16). "Make false and true first-class language features v8" (PDF). Retrieved 2022-05-26.
  8. Gustedt, Jens; Meneide, JeanHeyd (2022-07-22). "Introduce the nullptr constant". Retrieved 2022-09-01.
  9. "GCC 9 Changes". GCC 9 Release Notes.
  10. "Add a new language mode for C2x". LLVM Project Repository.
  11. "major changes between 10.00 and 11.00".

پیوند به بیرون ویرایش