C23 (C standart revizyonu)

C programlama dili standardının 2023 revizyonu

C23, C programlama dilinin açık standard taslağıdır ve ISO/IEC 9899:2024 olarak yayınlanması ve C17'nin (ISO/IEC 9899:2018)[1] yerini alması beklenmektedir. 2016'da gayriresmi olarak C2x[2] adıyla üzerinde çalışılmaya başlanmıştır ve Ekim 2024'te[3] yayınlanması beklenmektedir. C23'ün en son taslağı 1 Nisan 2023'te yayınlanmıştır ve genel erişime açıktır. WG14 (Working Group 14, 14. Çalışma Grubu) C2x taslağı için ilk olarak Ekim 2019[4] toplanmış, 2020'te COVID-19 pandemisi nedeniyle toplantılar sanal olarak uzaktan yapılmış, sonrasında telekonferans toplantıları 2024 boyunca devam etmiştir. Haziran 2024'teki açık standardta 'C23'ün bitiminden sonra, "C2y" olarak adlandırıldığı' belirtilmiştir.

C23 ile birlikte __STDC_VERSION__ ön tanımlı makrosunun değeri 201710L'ten, 202311L olarak değiştirilmiştir.

Özellikler

değiştir

C23'ün en son çalışma taslağında değişiklikler aşağıda listelenmiştir.[5]

Standard Kütüphane

değiştir

Yeni eklenen fonksiyonlar

değiştir
  • Optimizasyonlardan etkilenmeden bellekte saklanan hassas veriyi silen memset_explicit() fonksiyonu <string.h> başlığına eklendi.[6]
  • POSIX ve SVID C uzantılarına benzer şekilde, belli bir baytla karşılaşılana kadar bellek kopyalayan memccpy() fonksiyonu <string.h> başlığına eklendi.[7]
  • POSIX ve SVID C uzantılarına benzer şekilde, bir string'in kopyasını oluşturan strdup() ve strndup() fonksiyonları <string.h> başlığına eklendi.[8]
  • İşaretçinin bellekte hizalanma (alignment) şeklini anlamak için memalignment() fonksiyonu <stdlib.h> başlığına eklendi.[9]
  • Pek çok integer türü için bitlerle ilgili bilgi elde etmek amaçlı fonksiyon / macro ve türler <stdbit.h> başlığına eklendi. Varolan kütüphanelerle isim çakışmasını önlemek için hepsi stdc_ şeklinde öneklendirildi.[10][11]
    • Aşağıdaki fonksiyonlarda * karakteri, uc, us, ui, ul, ull olarak farkli integer türlerini ifade edecek şekilde 5 fonksiyon adını temsil etmektedir. * olmayacak şekilde jenerik (type-generic) makro olarak da kullanılabilir.[10]
    • Bir değerdeki 1 veya 0 bitlerini saymak için stdc_count_ones*() ve stdc_count_zeros*() eklendi.[10]
    • En çok değeri oluşturan bit'ten (MSB, most significant bit) itibaren, sırasıyla, yan yana 1 ve 0 sayılarını veren stdc_leading_ones*() ve stdc_leading_zeros*().[10]
    • En az değeri oluşturan bit'ten (LSB, most significant bit) itibaren, sırasıyla, sayının başından başlayıp 1 ve 0 bit'lerinin sayılarını veren stdc_trailing_ones*() and stdc_trailing_zeros*().[10]
    • En çok değeri oluşturan bit'ten itibaren, sırasıyla, ilk 1 ve 0 bitlerinin pozisyonunu veren stdc_first_leading_one*() ve stdc_first_leading_zero*().[10]
    • En az değeri oluşturan bit'ten itibaren, sırasıyla, ilk 1 ve 0 bitlerinin pozisyonunu verenstdc_first_trailing_one*() ve stdc_first_trailing_zero*().[10]
    • Bir değerin 2'nin çarpanı olup olmadığına karar vermek için stdc_has_single_bit*().[10]
    • Geçilen değerden büyük veya ona eşit olan 2'nin en büyük tam kuvvetini döndüren stdc_bit_floor*().[10]
    • Geçilen değerden büyük veya ona eşit olan 2'nin en küçük tam kuvvetini döndüren stdc_bit_ceil*().[10]
    • Bir değeri temsil etmek için gerekli bit sayısı için stdc_bit_width*().[10]
  • glibc ve musl kütüphanelerinde bulunan ve verilen zamanı takvim zamanına dönüştürentimegm() fonksiyonu <time.h> başlığına eklendi.[12]

Mevcut fonksiyonlara yapılan değişikler

değiştir
  • Binary'e (2 tabanında sayıya) dönüşüm belirteci olan %b, printf() fonksiyon ailesine eklendi.[13]
  • Binary dönüşüm belirteci olan %b, scanf() fonksiyon ailesine eklendi.[13]
  • 0b ve 0B binary dönüşüm desteği strtol() ve wcstol() fonksiyon ailesine eklendi.[13]
  • bsearch(), bsearch_s(), memchr(), strchr(), strpbrk(), strrchr(), strstr() fonksiyonları ile bunların genişletilmiş karakter için olaran versiyonları olan wmemchr(), wcschr(), wcspbrk(), wcsrchr(), wcsstr() fonksiyonlarına eğer const nesneler geçildiyse, const nitelenmiş nesne döndürecek şekilde değiştirildi.[14]

Anahtar sözcükler

değiştir
  • true ve false anahtar sözcükleri eklendi.[15]
  • alignas, alignof, bool, static_assert ve thread_local anahtar sözcükleri eklendi. Daha önce tanımlanmış olan anahtar sözcükler, yenilerine alternatif olarak kullanılabilecek şekilde bırakıldı: _Alignas, _Alignof, _Bool, _Static_assert, _Thread_local.[16]
  • _BitInt anahtar sözcüğü eklendi
  • typeof ve typeof_unqual anahtar sözcükleri eklendi
  • nullptr anahtar sözcüğü eklendi
  • constexpr anahtar sözcüğü eklendi
  • _Decimal32, _Decimal64, _Decimal128 anahtar sözcükleri on tabanındaki kayan noktalı sayı aritmatiğinde isteğe bağlı kullanılabilecek şekilde eklendi

Önişlemci

değiştir
  • #elif defined ve #elif !defined direktiflerine eşdeğer olan #elifdef ve #elifndef direktifleri[17] eklendi. Her iki direktif de önceden C++23 standardına ve GCC 12'de eklenmişti.[18]
  • Binary kaynak (resource) include etmeye yarayan #embed direktifi ile bu kaynağın erişilebilir olup olmadığını önişlemci direktifiyle sorgulamaya yarayan __has_embed eklendi.[19]
  • Derlemede uyarı mesajı vermeye yarayan #warning eklendi.[20]
  • Bir başlık dosyasının ulaşılabilir olup olmadığını önişlemci direktifiyle kontrol etmeye yarayan __has_include eklendi.[21]
  • Bir özniteliğin (attribute) ulaşılabilir olup olmadığını önişlemci direktifiyle kontrol etmeye yarayan __has_c_attribute eklendi.[22]
  • Bir makroya yalnızca değişebilen sayıda (variadic) argüman geçildiğinde genişleyen ve variadic makrolar oluşturmaya yarayan __VA_OPT__ fonksiyonel makrosu eklendi.[23]
  • Null pointer türü olan nullptr_t eklendi.[24]
  • Bit kesinlikli integer türleri olan _BitInt(N) ve unsigned _BitInt(N) eklendi. Maximum bit genişliğini veren BITINT_MAXWIDTH eklendi.[25][26]
  • Tamsayılar için kontrol edilmiş işlemler sağlayan ckd_add(), ckd_sub(), ckd_mul() jenerik macrolar.[27]
  • Dizi türlerinin fonksiyona dizi boyu bilgisiyle geçilmesine izin verildi (Bu özellik yığın bellekte tahsis edilmiş otomatik saklama sürecinde barındırılan değişken boylu diziler (Variable-length array,VLA) için geçerli değildir).[28]
  • Dizi türleri için daha iyi const desteği.[29]
  • typeof(...) operatörü standardlaştırıldı.[30]
  • auto anahtar sözcüğünün anlamı, tür belirleme yapabilecek şekilde geniştildi fakat barındırma sınıfı belirteci şeklindeki önceki anlamı auto bir tür ile birlikte kullanıldığında hala kullanılabilir olacak şekilde korundu. C++'tan farklı olarak C23 tür belirlemesi yalnızca nesne tanımları için geçerlidir, fonksiyon dönüş türü ve paramatresi olarak kullanılamaz.[31]
  • struct, union ve enum türlerinin tanımı ile birlikte yapılan nesne deklerasyonlarında (​struct S{ /*...*/ } s;​ gibi) farklı nesnelerin ayni dönüşüm biriminde (translation unit, TU) bulunmasına izin verildi.[32]
  • Belli bit genişliğindeki (intN_t ve uintN_t gibi) integer değerlerinin ​intmax_t​'nin değerini geçebilmesine izin verildi.(N2888).[33]

Sabitler

değiştir
  • nullptr_t türünün bir sabiti olan nullptr eklendi,[24]
  • _BitInt(N) ve unsigned _BitInt(N) türleri için wb ve uwb integer literal sonekleri eklendi,[34]
  • Binary sayı sabiti için 0b ile 0B önekleri eklendi,[35]
  • Sayılarda basamak ayracı olarak kullanılabilen ' eklendi,[36]
  • enum türlerinin temsil ettiği sabitler için ifade ettiği değerlerin türünü belirleme özelliği getirildi,[37]
  • Tuttuğu integer türü belirtilmemiş enum türleri için int ifade edilemeyen değerlere (INT_MAX'tan büyük ve INT_MIN'den küçük) izin verildi.[38]

Sözdizim

değiştir
  • Etiketlerin (label) bildirimlerden önce ve birleşik deyimlerin (compound statements) sonunda yapılabilmesine izin verildi.[39]
  • Fonksiyon tanımlarında isimsiz parametrelere izin verildi.[40]
  • VLA için de kullanılabilecek olan {} kullanarak sıfır ilk değer ataması[41]
  • Değişken sayıda parametre alabilen (variadic) fonksiyonların ... (ellipsis)'den önce bir isimli argüman belirtilmesi şartı kaldırıldı. va_start makrosu artık ikinci bir argumana sahip olmak zorunda veya varsa ilk argümandan sonraki argümanları işlemek (evaluate) zorunda değil.[42]
  • C++11'deki gibi kullanan öznitelik (attribute) sözdizimi eklendi.[43] Ek olarak aşağıdaki öznitelikler eklendi:
    • Yalnızca fonksiyon parametrelerine bakarak tekrar aynı sonuçları üretilebileceğini derleyiciye bildiren ve optimizasyonu mümkün kılan [[unsequenced]] özniteliği[44]
    • [[unsequenced]] özniteliğine benzer ancak fonksiyon çağrılma sırasına bağımlı olan [[reproducible]] özniteliği,[44]
  • C++17 ile uyumluluk amacıyla tek argümanlı _Static_assert eklendi (assert.h).[45]
  • Bir argümana sahip olmayan fonksiyonların parametre listesinde void belirtmesi gerekliliği kaldırıldı (void foo() şeklinde).

C++ ile uyumluluk

değiştir
  • Etiketlerin (label) bildirimlerden önce yapılabilemesi, isimsiz fonksiyon argümanları, {} kullanarak sıfır ilk değer ataması, isimli bir argümana ihtiyaç duymayan değişiken sayıda argüman alabilen (variadic) fonksiyonlar, C++11'deki gibi öznitelik (attribute) sözdizimi, assert.h'ta tanımlanan _Static_assert gibi C++ ile uyumluluğu geliştirme amaçlı çeşitli sözdizimi değişikleri yapıldı. Etiketlerin (label) birleşik deyimlerin (compound statement) sonunda yapılabilmesi ilgili gerekli değişiklikler C++23'te yapıldı.[46]
  • C++-stili öznitelik sözdizimi desteği getirildi.[47] [[deprecated]],[48] [[fallthrough]],[49] [[maybe unused]],[50] [[nodiscard]],[51] ve [[noreturn]] öznitelikleri C++11 ile uyumluluk için eklendi, sonrasında C11 ile eklenen _Noreturn, noreturn ile <stdnoreturn.h> deprecate edildi.[52] Öznitelik listesinde aynı özniteliğin birden fazla bulunmasına C++23 ile uyumluluk için izin verildi.[53] Tüm standard özniteliklerin ön ve sonuna çift altçizgi eklenerek kullanılabilmesine izin verildi (ör. [[deprecated]] ile [[deprecated]] aynı anlama sahip).
  • UTF-8 kodlamasını temsil etmek için karakter literallerine u8 önekinin getirilebilmesi C++17 ile uyumluluk için eklendi.[54][55]
  • #elifdef ve #elifndef önişlemci direktifleri C++23 ile uyumluluk için eklendi.[17]

Diğer özellikler

değiştir
  • Kayar noktalı (floating point) sayı aritmetiğinin mevcut versiyonu olan ISO/IEC 60559:2020 IEEE 754 standardı için genişletilmiş iki tabanında ve (isteğe bağlı olarak) on tabanında kayar noktalı aritmetik desteği.[56][57]
  • Nesneler için constexpr belirteci nesneler için getirirdi, fakat C++'taki anlamının aksine fonsiyonlar için kullanılabilir değil.[58]
  • UTF-8 ile kodlanmış (encode) veriyi tutmak için char8_t türü eklendi ve u8 karakter değişmezlerinin (constant) ve string literallerinin türü char8_t olarak değiştirildi.[59]
  • Başka bir şekilde olması belirtilmediği takdirde, tüm char16_t string ve literal'lerin UTF-16 ve char32_t string ve literallerinin UTF-32 olarak kodlanacağı (encode) açıkça belirtildi.[60]
  • Nesne barındırma belirteçlerinin birleşik deyim (compound statement) tanımlarında kullanılabilmesine izin verildi.[61]

Geçersiz kılınan özellikler

değiştir

Bazı eski (obsolete) özellikler C23 çalışma taslağından kaldırıldı veya tavsiye edilmeyen olarak işaretlendi (deprecated).

  • Digraf ve trigraf karakterler kaldırıldı.[62]
  • Fonksiyon argümanları hakkında bilgi sağlamayan K&R fonksiyon tanım ve bildirimleri kaldırıldı.[63][64]
  • İşaretli tam sayıların ifade edilişinde ikinin tümleyeni dışındaki tüm yöntemler kaldırıldı.[65]
  • Geçerliliğini yitirmiş özellikler olan *_HAS_SUBNORM makroları <float.h>'tan kaldırıldı.[66]

Daha fazlası

değiştir
  • N3096 (Resmi C23 standardının basımından önceki son taslak); WG14; Nisan 2023. (free download)
  • N3149 (C23 standardı üzerinde çalışılan taslak); WG14; July 2023. (not available to public)
  • N3219 (ISO/IEC 9899:2023 DIS Draft); WG14; Şubat 2024. (ISO draft available but not free)
  • ISO/IEC 9899:2024 (resmi C23 standardı); ISO; 2024. (2024'te yayınlanması planlanıyor)
  • N3220 (first working draft after C23; differs from draft standard N3219 only in one footnote[67]); WG14; February 2024. (free download)

Kaynakça

değiştir
  1. ^ "History of C". cppreference.com. 27 Haziran 2022. 19 Ekim 2022 tarihinde kaynağından arşivlendi. 
  2. ^ "WG14-N2086: C2x Charter". open-std.org. 20 Eylül 2016. 22 Aralık 2022 tarihinde kaynağından arşivlendi. 
  3. ^ On August 30, 2024 the standard reached ISO development stage "50.20 Proof sent to secretariat or FDIS ballot initiated: 8 weeks" and as of September 19, ISO lists it as having "Publication date : 2024-10". "ISO/IEC PRF 9899". iso.org. 19 Eylül 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Eylül 2024. 
  4. ^ "WG14-N2437: Agenda for October 2019". open-std.org. 21 Ekim 2019. 5 Mart 2021 tarihinde kaynağından arşivlendi. 
  5. ^ "WG14-N3096: Draft for ISO/IEC 9899:2024" (PDF). open-std.org. 1 Nisan 2023. 2 Nisan 2023 tarihinde kaynağından arşivlendi (PDF). 
  6. ^ "WG14-N2897: memset_explicit()". open-std.org. 27 Aralık 2021. 25 Ekim 2022 tarihinde kaynağından arşivlendi. 
  7. ^ "WG14-N2349: Toward more efficient string copying and concatenation". open-std.org. 18 Mart 2019. 30 Eylül 2022 tarihinde kaynağından arşivlendi. 
  8. ^ "WG14-N2353: strdup() and strndup()". open-std.org. 18 Mart 2019. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  9. ^ "WG14-N2974: Queryable pointer alignment" (PDF). open-std.org. 15 Nisan 2022. 13 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  10. ^ a b c d e f g h i j k "WG14-N3022: Modern Bit Utilities". open-std.org. 6 Temmuz 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  11. ^ "21 Bit Manipulation". 29 Eylül 2024. 
  12. ^ "WG14-N2833: Add timegm() as non-optional part of time.h". open-std.org. 7 Ekim 2021. 1 Aralık 2021 tarihinde kaynağından arşivlendi. 
  13. ^ a b c "WG14-N2630: formatted input/output of binary integer numbers" (PDF). open-std.org. 1 Ocak 2021. 14 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  14. ^ "WG14-N3020: Qualifier-preserving standard library functions" (PDF). open-std.org. 13 Haziran 2022. 13 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  15. ^ "WG14-N2935: Make false and true first-class language features" (PDF). open-std.org. 15 Şubat 2022. 21 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  16. ^ "WG14-N2934: Revise spelling of keywords" (PDF). open-std.org. 15 Şubat 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  17. ^ a b "WG14-N2645: Add support for preprocessing directives #elifdef and #elifndef" (PDF). open-std.org. 25 Ocak 2020. 28 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  18. ^ "GCC 12 Adds Support For New #elifdef #elifndef Directives". phoronix. 12 Mayıs 2021. 27 Aralık 2022 tarihinde kaynağından arşivlendi. 
  19. ^ "WG14-N3017: #embed - a scannable, tooling-friendly binary resource inclusion mechanism". open-std.org. 27 Haziran 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  20. ^ "WG14-N2686: #warning" (PDF). open-std.org. 22 Temmuz 2022. 28 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  21. ^ "WG14-N2799: __has_include for C" (PDF). open-std.org. 30 Ağustos 2021. 24 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  22. ^ "WG14-N2553: Querying attribute support" (PDF). open-std.org. 4 Ağustos 2020. 14 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  23. ^ "WG14-N3033: Comma omission and comma deletion". open-std.org. 20 Temmuz 2022. 27 Aralık 2022 tarihinde kaynağından arşivlendi. 
  24. ^ a b "WR14-N3042: Introduce the nullptr constant". open-std.org. 22 Temmuz 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  25. ^ "WG14-N2763: Adding a Fundamental Type for N-bit integers" (PDF). open-std.org. 21 Haziran 2021. 27 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  26. ^ "WG14-N3035: _BitInt Fixes" (PDF). open-std.org. 21 Temmuz 2022. 13 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  27. ^ "WG14-N2867: Checked N-Bit Integers" (PDF). open-std.org. 28 Kasım 2021. 14 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  28. ^ "WG14-N2778: Variably-Modified Types" (PDF). open-std.org. 11 Temmuz 2021. 22 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  29. ^ "WG14-N2607: Compatibility of Pointers to Arrays with Qualifiers" (PDF). open-std.org. 31 Ekim 2020. 13 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  30. ^ "WG14-N2899: Not-so-magic - typeof for C". open-std.org. 21 Ocak 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  31. ^ "WG14-N3007: Type inference for object definitions". open-std.org. 10 Haziran 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  32. ^ "WG14-N3037: Improved Rules for Tag Compatibility (updates N3032)" (PDF). 17 Eylül 2024 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 3 Ekim 2024. 
  33. ^ "C23 is Finished: Here is What is on the Menu". The Pasture (İngilizce). 31 Temmuz 2022. 27 Eylül 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Ekim 2024. 
  34. ^ "WG14-N2775: Literal suffixes for bit-precise integers" (PDF). open-std.org. 13 Temmuz 2021. 27 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  35. ^ "WG14-N2549: Allow for binary integer constants" (PDF). open-std.org. 30 Temmuz 2020. 22 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  36. ^ "WG14-N2626: Digit separators" (PDF). open-std.org. 15 Aralık 2020. 19 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  37. ^ "WG14-N3030: Enhancements to Enumerations". open-std.org. 19 Temmuz 2022. 26 Kasım 2022 tarihinde kaynağından arşivlendi. 
  38. ^ "WG14-N3029: Improved Normal Enumerations". open-std.org. 19 Temmuz 2022. 29 Ocak 2023 tarihinde kaynağından arşivlendi. 
  39. ^ "WG14-N2508: Free Positioning of Labels Inside Compound Statements" (PDF). open-std.org. 28 Mart 2020. 27 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  40. ^ "WG14-N2510: Allowing unnamed parameters in a function definition" (PDF). open-std.org. 9 Nisan 2020. 24 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  41. ^ "WG14-N2900: Consistent, Warningless, and Intuitive Initialization with {}". open-std.org. 1 Ocak 2022. 27 Aralık 2022 tarihinde kaynağından arşivlendi. 
  42. ^ "WG14-N2975: Relax requirements for variadic parameter lists" (PDF). open-std.org. 15 Nisan 2022. 28 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  43. ^ "WG14-N2335: Attributes in C" (PDF). open-std.org. 9 Mart 2019. 26 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  44. ^ a b "Unsequenced functions". open-std.org. 24 Mayıs 2022 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Temmuz 2024. 
  45. ^ "WG14-N2265: Harmonizing static_assert with C++" (PDF). open-std.org. 6 Temmuz 2018. 28 Mart 2023 tarihinde kaynağından arşivlendi (PDF). 
  46. ^ "Labels at the end of compound statements (C compatibility)" (PDF). 13 Ocak 2022. 17 Haziran 2022 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 13 Ekim 2024. 
  47. ^ "WG14-N2554: Minor attribute wording cleanups" (PDF). open-std.org. 4 Ağustos 2020. 28 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  48. ^ "WG14-N2334: The deprecated attribute" (PDF). open-std.org. 22 Ocak 2019. 19 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  49. ^ "WG14-N2408: The fallthrough attribute" (PDF). open-std.org. 11 Ağustos 2019. 25 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  50. ^ "WG14-N2270: The maybe_unused attribute" (PDF). open-std.org. 6 Temmuz 2018. 25 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  51. ^ "WG14-N2267: The nodiscard attribute" (PDF). open-std.org. 6 Temmuz 2018. 19 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  52. ^ "WG14-N2764: The noreturn attribute" (PDF). open-std.org. 21 Haziran 2021. 25 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  53. ^ "WG14-N2557: Allow Duplicate Attributes" (PDF). open-std.org. 1 Eylül 2020. 28 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  54. ^ "WG14-N2418: Adding the u8 character prefix" (PDF). open-std.org. 2 Eylül 2019. 13 Ocak 2023 tarihinde kaynağından arşivlendi (PDF). 
  55. ^ "What is the point of the UTF-8 character literals proposed for C++17?; Stack Overflow". 10 Kasım 2024 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Ekim 2024. 
  56. ^ "WG14-N2341: ISO/IEC TS 18661-2 - Floating-point extensions for C - Part 2: Decimal floating-point arithmetic" (PDF). open-std.org. 26 Şubat 2019. 21 Kasım 2022 tarihinde kaynağından arşivlendi (PDF). 
  57. ^ "WG14-N2601: Annex X - IEC 60559 interchange and extended types" (PDF). open-std.org. 15 Ekim 2020. 14 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  58. ^ "WG14-N3018: The constexpr specifier for object definitions". open-std.org. 6 Temmuz 2022. 24 Aralık 2022 tarihinde kaynağından arşivlendi. 
  59. ^ "WG14-N2653: char8_t: A type for UTF-8 characters and strings (Revision 1)". open-std.org. 4 Haziran 2021. 27 Mayıs 2023 tarihinde kaynağından arşivlendi. 
  60. ^ "WG14-N2728: char16_t & char32_t string literals shall be UTF-16 & UTF-32". open-std.org. 15 Mayıs 2021. 27 Mayıs 2023 tarihinde kaynağından arşivlendi. 
  61. ^ "WG14-N3038: Introduce storage-class specifiers for compound literals". open-std.org. 21 Temmuz 2022. 26 Kasım 2022 tarihinde kaynağından arşivlendi. 
  62. ^ "WG14-N2940: Removing trigraphs??!" (PDF). open-std.org. 2 Mart 2022. 26 Ekim 2022 tarihinde kaynağından arşivlendi (PDF). 
  63. ^ "WG14-N2432: Remove support for function definitions with identifier lists proposal" (PDF). open-std.org. 25 Eylül 2019. 27 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  64. ^ "WG14-N2841: No function declarators without prototypes". open-std.org. 10 Ekim 2021. 12 Kasım 2022 tarihinde kaynağından arşivlendi. 
  65. ^ "WG14-N2412: Two's complement sign representation" (PDF). open-std.org. 11 Ağustos 2019. 27 Aralık 2022 tarihinde kaynağından arşivlendi (PDF). 
  66. ^ "WG14-N2993: Make *_HAS_SUBNORM be obsolescent". open-std.org. 6 Haziran 2022. 5 Aralık 2022 tarihinde kaynağından arşivlendi. 
  67. ^ "N3221 - Editor's Report, Post January 2024 Meeting". open-std.org. 15 Şubat 2024. 24 Mayıs 2024 tarihinde kaynağından arşivlendi. 

Dış bağlantılar

değiştir

Önce gelen
C17
C dili standartları En son