GCC 15 kasutab vaikimisi standardit C23

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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster