Koodibaasi, mille pĂ”hjal valmib jĂ€rgmise aasta kevadel plaanitud GCC 15 kompilaatorkogumik, on tehtud muudatus, mis sisaldab vaikimisi GNU laiendustega C23 standardi kasutamist ("-std=gnu23") C keeles programmide kompileerimisel (varem kasutati vaikimisi C17 standardit - "-std=gnu17"). Muudatus vĂ”ib potentsiaalselt pĂ”hjustada probleeme olemasolevate projektide koostamisel, kuna uues standardis on erinevusi, nagu nullptr konstant, _BitInt(n) tĂŒĂŒp ja bool, true ja false mĂ€rksĂ”nad, mis vĂ”ivad konfliktida rakendustes mÀÀratud sama nimetuse identifikaatoritega.
C23 standard (ISO/IEC 9899:2024) avaldati ametlikult rahvusvahelise standardimisorganisatsiooni (ISO) poolt 31. oktoobril 2024. Uues standardis on mitmeid muudatusi:
- K&R C stiilis funktsioonide mÀÀramise vĂ”imalus on eemaldatud, mida kasutati enne ANSI C spetsifikatsiooni vastuvĂ”tmist ja mida kirjeldatakse Kernighani ja Ritchie raamatues "The C Programming Language". K&R stiil tĂ€hendab argumentide tĂŒĂŒpide kirjelduse esitamist pĂ€rast funktsiooni mÀÀratlemist, nĂ€iteks "int add(a, b) int a, b; {}".
- Nimekirja funktsioonide parameetritest â kohustuslikkus mitte nĂ€idata nimedeta parameetreid funktsioonide mÀÀramisel (nagu C++-s). NĂ€iteks on nĂŒĂŒd vĂ”imalik kirjutada âint f(int, int) { return 7; }â.
- Toetatakse sĂŒnaktit â[[nimi]]â atribuutide mÀÀratlemiseks nagu C++-s (â[[gnu::const]]â, â[[deprecated]]â, â[[fallthrough]]â, â[[maybe_unused]]â, â[[nodiscard]]â, â[[noreturn]]â, â[[reproducible]]â, â[[unsequenced]]â). NĂ€iteks atribuut [[noreturn]] vĂ”imaldab nĂ€idata, et funktsioon ei tagasta vÀÀrtusi (pealkirjafail stdnoreturn.h ja spetsiifika â_Noreturnâ on kuulutatud aegunuks).
- Toetatakse sĂŒnaktit âu8â konstantsuste mÀÀramiseks, mis sisaldavad mĂ€rke UTF-8-s.
- Lisatud tĂŒĂŒp char8_t UTF-8 kodeeringus olevate stringide ja mĂ€rkide jaoks ning funktsioonid mitme baitsete mĂ€rkide stringide konverteerimiseks mbrtoc8() ja c8rtomb().
- Muutunud on vĂ”tmesĂ”na âautoâ tegevus, mis nĂŒĂŒd viib tĂŒĂŒbi tuvastamiseni objektide mÀÀramisel, mis vĂ”imaldab kasutada tunnust âautoâ muutuja tĂŒĂŒpide mÀÀratlemiseks, pĂ”hinedes nende initsialiseerimiseks vĂ€ljendi tĂŒĂŒbile. NĂ€iteks: âauto y = cos(x);â.
- TĂŒhja argumendi nimekirjaga funktsioonid kĂ€sitletakse nĂŒĂŒd funktsioonidena, mis ei vĂ”ta argumente vastu.
- Lisatud toetust pealkirjafailidele <stdckdint.h> ja <stdbit.h> koos makrode, funktsioonide ja tĂŒĂŒpidega tĂ€isarvuliste arvutuste kontrollimiseks.
- Lubatud on hĂŒpikelementide paigutamine mis tahes kohtades komposiitavaldistes.
- Toetamine trĂŒgraafide koodis lĂ”petatud, kolme ASCII-mĂ€rgi jĂ€rjestusi, mida töödeldi ĂŒhe mĂ€rgina, nĂ€iteks jĂ€rjestust «??=» sai kasutada «#» asemel. PĂ€rast Unicode'i ilmumist on trĂŒgraafide toetamine kaotanud mĂ”tte.
- Lisatud eelnevateks «0b» ja «0B» tÀisarvude esitamiseks binaarvormis, nÀiteks «int b = 0b101010».
- Lisatud vÔtmesÔnad bool, static_assert, alignas, alignof ja thread_local.
- Lubatud tĂŒhi sulgude «{}» kasutamine nullvÀÀrtuste initsialiseerimiseks, st nĂŒĂŒd saab kirjutada «struct S { int x, y } s = {};».
- Esitatud on vĂ”imalus mĂ€rkida mingeid universaalseid sĂŒmboleid sĂŒmbolitoodetes ja stringiliteraalides. NĂ€iteks «int \u0024 = 0;».
- Failile «stddef.h» on lisatud makro «unreachable».
- Lisatud on uus nullptr_t tĂŒĂŒp ja konstant nullptr, et mÀÀratleda nullviidikud, mis vĂ”ivad konverteeruda igasuguste viidikuteks ja esindada NULL varianti, mis ei ole seotud tĂ€isarvutĂŒĂŒpide ega tĂŒĂŒbiga void*. NĂ€iteks on vĂ”imalik mĂ€rgistada "void func(nullptr_t); func(0); func((void *)0);".
- Lisatud on tĂŒĂŒpide "_BitInt (N)" ja "unsigned _BitInt (N)" mÀÀratlemine, et defineerida tĂ€isarve, millel on mÀÀratud bitide arv, samuti uued kĂŒmnendsĂŒsteemis ujuvad liigid "_Decimal32", "_Decimal64" ja "_Decimal128", ning funktsioonid tööks nende tĂŒĂŒpidega.
- Lisatud on vĂ”imalus kasutada sĂŒmbolit âââ numbrite selgemaks eraldamiseks (nĂ€iteks â1â000â000â).
- Struktuure, liiteid ja loendeid on lubatud mÀÀratleda rohkem kui ĂŒks kord ĂŒhes ulatuses sama sisu ja korduva sildi all.
- Standardisse on lisatud operaatorid typeof ja typeof_unqual.
- Toetatakse constexpr spetsifikaatori kasutamist objektide mÀÀratlemiseks.
- Pealkirjafailides float.h ja math.h on lisatud makrod INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX ja LDBL_NORM_MAX.
- Lisatud on eelprotsessori direktiivid #elifdef, #elifndef, #warning ja #embed. â#embedâ on mĂ”eldud binaarsete ressursside integreerimiseks.
- Lihtsustatud on variadiargumendiga loendite kasutamine.
- Enumide vÔimalusi on laiendatud.
- Funktsioonide printf() ja scanf() peredes on lisatud toetus asenduseks "%b" binaarsete vÀÀrtuste töötlemiseks.
- Funktsiooni realloc() kutsumine nulli suurusega loetakse mÀÀratlemata kÀitumiseks.
- Funktsioonid memccpy(), strdup(), strndup(), gmtime_r() ja localtime_r() on standardiseeritud.
- Funktsioonid asctime() ja ctime() on deklareeritud aegunuks.
- Makoid static_assert ja thread_local on muudetud vÔtmesÔnadeks.
Allikas: opennet.ru
