A GCC 15 alapértelmezés szerint a C23 szabványt fogja használni

A kódalap, amely alapján a jövő év tavaszán tervezett GCC 15 fordítókészlet kiadása készül, módosítást fogadott el, amely alapértelmezésben a GNU kiterjesztésekkel rendelkező C23 szabvány használatát tartalmazza („-std=gnu23”) a C programok fordítása során (korábban az alapértelmezett C17 szabvány volt — „-std=gnu17”). A módosítás potenciálisan problémát okozhat a meglévő projektek összeállításakor, mivel az új szabványban eltérések találhatók, például a nullptr konstans, a _BitInt(n) típus és a bool, true és false kulcsszavak bevezetése, amelyek ütközhetnek a programokban meghatározott azonosítókkal.

A C23 szabvány (ISO/IEC 9899:2024) hivatalosan megjelent a Nemzetközi Szabványügyi Szervezet (ISO) által 2024. október 31-én. Az új szabványban található változások közül:

  • Eltávolították a K&R C stílusú függvények definíciójának lehetőségét, amelyet az ANSI C specifikációjának elfogadása előtt használtak, és amelyet a Kernighan és Ritchie által írt «The C Programming Language» könyv is ismertet. A K&R stílus értelmében a paraméterek típusait a függvény definiálása után kell megadni, például: «int add(a, b) int a, b; {};»
  • Névtelen függvényparaméterek — nem kötelező a fel nem használt paraméterek neveinek megadása a függvények definiálásakor (ahogy C++-ban). Például mostantól lehet írni: «int f(int, int) { return 7; }».
  • A C++-ra jellemző «[[név]]» szintaxis támogatása attribútumok definiálására («[[gnu::const]]», «[[deprecated]]», «[[fallthrough]]», «[[maybe_unused]]», «[[nodiscard]]», «[[noreturn]]», «[[reproducible]]», «[[unsequenced]]»). Például a [[noreturn]] attribútum lehetővé teszi, hogy jelezzük, hogy a függvény nem ad vissza értékeket (a stdnoreturn.h fejlécfájl és az „_Noreturn” specifikátor elavultnak számít).
  • Az u8” szintaxis támogatása UTF-8 karakterekkel rendelkező konstansok definiálására.
  • Bevezetésre került a char8_t típus az UTF-8 kódolású szövegek és karakterek számára, valamint függvények a többbájtú karakterekből való szöveggé alakításhoz: mbrtoc8() és c8rtomb().
  • Megváltozott az «auto» kulcsszó működése, amely mostantól a típusok kimenetéhez vezet objektumok definiálásakor, lehetővé téve az «auto» jelző használatát a változók típusának a kifejezés típusán alapuló meghatározásához. Például: «auto y = cos(x);».
  • A paraméterlistával rendelkező üres függvények most már úgy vannak kezelve, mint azok a függvények, amelyek nem fogadnak el paramétereket.
  • Hozzáadva a és a fejlécek támogatása makrókkal, függvényekkel és típusokkal az egész számok számításainak ellenőrzésére.
  • Áttérhet több helyre a címkék elhelyezése a bonyolult kifejezések belsejében.
  • Megszűnt a trigráfok támogatása a kódban, három ASCII karakterből álló sorozatok, amelyek egy karakterként kerültek feldolgozásra, például a «??=» sorozat használható volt a «#» helyett. A Unicode megjelenésével a trigráfok támogatása értelmét vesztette.
  • Hozzáadva a «0b» és «0B» előtagok támogatása az egész számok bináris formában történő megadásához, például «int b = 0b101010».
  • Hozzáadva a bool, static_assert, alignas, alignof és thread_local kulcsszavak.
  • Megengedett üres zárójelek «{}» használata a null értékek inicializálásához, azaz mostantól írható «struct S { int x, y } s = {}; ».
  • Lehetővé tette bármilyen univerzális karakternevek megadását karakter- és karakterlánc literálokban. Például, «int \u0024 = 0; ».
  • A «stddef.h» fájlba hozzáadva a «unreachable» makrót.
  • Hozzáadva egy új nullptr_t típus és nullptr konstans a null pointerek meghatározásához, amelyek bármilyen pointer típusra átkonvertálhatók, és a NULL változataként is szolgálhatnak, amely nem kötődik az egész szám típusokhoz és a void* típushoz. Például lehet megadni «void func(nullptr_t); func(0); func((void *)0); ».
  • Hozzáadva a «_BitInt (N)» és «unsigned _BitInt (N)» típusok az adott számú bitből álló egész számok meghatározásához, valamint a «_Decimal32», «_Decimal64» és «_Decimal128» lebegőpontos tizedes típusok, és funkciók ezen típusok kezelésére.
  • Lehetővé téve a «‘» karakter használatát a számok helyiértékének szemléletes elválasztására (például «1’000’000»).
  • Struktúrák, egyesítések és felsorolások több alkalommal is meghatározhatók egyazon láthatósági környezetben ugyanazzal a tartalommal és ismétlődő címkékkel.
  • A standardba belekerültek a typeof és a typeof_unqual operátorok.
  • Támogatást nyert a constexpr jelző használata objektumok meghatározásához.
  • A float.h és math.h fejlécfájlokba hozzáadta az INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX és LDBL_NORM_MAX makrókat.
  • Hozzáadva préprocesszor direktívák: #elifdef, #elifndef, #warning és #embed. A «#embed» a bináris erőforrások integrálására szolgál.
  • Egyszerűsítve van a változó számú argumentumú (variadic) listák használata.
  • Kibővítve a felsorolások (enum) képességei.
  • Hozzáadva a «%b» helyettesítő támogatás a printf() és scanf() függvények bináris értékeinek feldolgozásához.
  • A realloc() függvény nullás mérettel való hívása határozatlan viselkedésre vált.
  • A memccpy(), strdup(), strndup(), gmtime_r() és localtime_r() függvények szabványosítva lettek.
  • Elavultnak nyilvánították az asctime() és ctime() függvényeket.
  • A static_assert és thread_local makrók kulcsszavakként lettek nyilvánítva.

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster