GCC 15 kommer som standard att anvÀnda C23.

I kodbasen som ligger till grund för den planerade lanseringen av kompilatoruppsĂ€ttningen GCC 15 vĂ„ren nĂ€sta Ă„r har en Ă€ndring införts som innebĂ€r att standarden C23 med GNU-tillĂ€gg ('-std=gnu23') kommer att anvĂ€ndas som standard nĂ€r program skrivs i C (tidigare anvĂ€ndes standarden C17 - '-std=gnu17'). Ändringen kan potentiellt leda till problem vid kompilering av befintliga projekt, eftersom den nya standarden har skillnader, sĂ„som tillĂ€gget av konstanten nullptr, typen _BitInt(n) och nyckelorden bool, true och false, vilka kan krocka med identifierare med samma namn som anvĂ€nds i programmen.

Standarden C23 (ISO/IEC 9899:2024) publicerades officiellt av den internationella standardiseringsorganisationen (ISO) den 31 oktober 2024. Bland förÀndringarna i den nya standarden:

  • Möjligheten att definiera funktioner i K&R C-stil, som anvĂ€ndes före antagandet av ANSI C-specifikationen och som beskrivs i boken 'The C Programming Language' av Kernighan och Ritchie, har tagits bort. K&R-stilen innebĂ€r att typbeskrivningar av argument görs efter funktionsdefinitionen, till exempel 'int add(a, b) int a, b; {}'
  • ObenĂ€mnda funktionsparametrar - valfrihet att ange namn för oönskade parametrar vid funktionsdefinition (som i C++). Till exempel kan man nu skriva 'int f(int, int) { return 7; }'.
  • Stöd för syntaxen '[[namn]]' för att definiera attribut som i C++ ('[[gnu::const]]', '[[deprecated]]', '[[fallthrough]]', '[[maybe_unused]]', '[[nodiscard]]', '[[noreturn]]', '[[reproducible]]', '[[unsequenced]]'). Till exempel gör attributet [[noreturn]] det möjligt att ange att en funktion inte returnerar vĂ€rden (header-filen stdnoreturn.h och specifikatorn '_Noreturn' har förklarats förĂ„ldrade).
  • Stöd för syntaxen u8' för att definiera konstanter med tecken i UTF-8.
  • Typen char8_t har lagts till för strĂ€ngar och tecken i UTF-8-kodning samt funktioner för konvertering av strĂ€ngar med flerbyte-tecken mbrtoc8() och c8rtomb().
  • Beteendet för nyckelordet 'auto' har Ă€ndrats, vilket nu leder till typutdragning vid objektdefinition, vilket möjliggör anvĂ€ndning av nyckelordet 'auto' istĂ€llet för typ för att bestĂ€mma typ av variabler baserat pĂ„ uttryckstypen för deras initialisering. Till exempel: 'auto y = cos(x);'.
  • Funktioner med en tom parameterlista hanteras nu som funktioner som inte tar nĂ„gra argument.
  • Stöd för headerfilerna och med makron, funktioner och typer för kontroll av heltalsberĂ€kningar har lagts till.
  • Det Ă€r nu tillĂ„tet att placera brytpunkter pĂ„ valfria stĂ€llen inom sammansatta uttryck.
  • Stödet för trigraf-tecken i koden har upphört. Trigraf-tecken, som Ă€r sekvenser av tre ASCII-tecken som behandlas som ett tecken, till exempel sekvensen "??=", kunde anvĂ€ndas istĂ€llet för "#". Med Unicode framtrĂ€der trigrafers stöd som meningslöst.
  • Stöd för prefixen "0b" och "0B" har lagts till för att ange heltal i binĂ€r form, till exempel "int b = 0b101010".
  • Nyckelorden bool, static_assert, alignas, alignof och thread_local har lagts till.
  • Tomma klamrar "{}" Ă€r nu tillĂ„tna för att initialisera till nollvĂ€rden, det vill sĂ€ga nu kan man skriva "struct S { int x, y } s = {};".
  • Det har blivit möjligt att ange valfria universella symbolnamn i tecken- och strĂ€nglitraler. Till exempel, "int \u0024 = 0;".
  • Makrot "unreachable" har lagts till i "stddef.h".
  • En ny typ nullptr_t och konstanten nullptr för att definiera nullpekare som kan konverteras till vilken pekartyp som helst och representera varianten NULL, som inte Ă€r kopplad till heltal eller typen void*. Till exempel, kan man ange "void func(nullptr_t); func(0); func((void *)0);".
  • Typerna "_BitInt (N)" och "unsigned _BitInt (N))" har lagts till för att definiera heltal med ett angivet antal bitar, liksom decimala flyttalstyper "_Decimal32", "_Decimal64" och "_Decimal128" och funktioner för att arbeta med sĂ„dana typer.
  • Möjligheten att anvĂ€nda tecknet "‘" för tydlig separation av siffror i tal (till exempel "1’000’000") har lagts till.
  • Strukturer, unioner och upprĂ€kningar kan nu definieras mer Ă€n en gĂ„ng i samma synlighet med samma innehĂ„ll och upprepande tagg.
  • Operatörerna typeof och typeof_unqual har lagts till i standarden.
  • Stöd för att anvĂ€nda specifikatorn constexpr för att definiera objekt har introducerats.
  • Makron INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX och LDBL_NORM_MAX har lagts till i headerfilerna float.h och math.h.
  • Förbearbetningsdirektiven #elifdef, #elifndef, #warning och #embed har lagts till. "#embed" Ă€r avsett för integration av binĂ€ra resurser.
  • AnvĂ€ndningen av listor med ett variabelt antal argument (variadic) har förenklats.
  • Funktionerna hos upprĂ€kningar (enum) har utökats.
  • Stöd för substitut "%b" har lagts till för hantering av binĂ€ra vĂ€rden i printf() och scanf() funktionsfamiljer.
  • Anropet till funktionen realloc() med nollstorlek har övergĂ„tt till att vara osĂ€ker beteende.
  • Funktionerna memccpy(), strdup(), strndup(), gmtime_r() och localtime_r() har standardiserats.
  • Funktionerna asctime() och ctime() har förklarats som förĂ„ldrade.
  • Makron static_assert och thread_local har övergĂ„tt till nyckelord.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster