GCC 15 vil som standard bruge C23

I kodebasen, som danner grundlaget for den planlagte udgivelse af compileren GCC 15 til forĂ„r nĂŠste Ă„r, er der truffet en ĂŠndring, der inkluderer, at standarden C23 med GNU-udvidelser (‘-std=gnu23’) bruges som standard ved kompilering af programmer skrevet i C (tidligere var standarden C17 – ‘-std=gnu17’). Ændringen kan potentielt skabe problemer med eksisterende projekter, da der er forskelle i den nye standard, sĂ„som tilfĂžjelsen af konstanten nullptr, typen _BitInt(n) samt nĂžgleordene bool, true og false, der kan konflikte med identifikatorer med samme navn i applikationer.

Standard C23 (ISO/IEC 9899:2024) blev officielt offentliggjort af den internationale standardiseringsorganisation (ISO) den 31. oktober 2024. Blandt ĂŠndringerne i den nye standard er:

  • Muligheden for at definere funktioner i K&R C-stil, der blev brugt fĂžr vedtagelsen af ANSI C-specifikationen og beskrevet i bogen ‘The C Programming Language’ af Kernighan og Ritchie, er blevet fjernet. K&R-stilen indebĂŠrer, at argumenttyperne beskrives efter funktionsdefinitionen, for eksempel ‘int add(a, b) int a, b; {}’.
  • NavnlĂžse funktionsparametre — muligheden for ikke at angive navne pĂ„ ubrugte parametre ved definition af funktioner (som i C++). For eksempel kan man nu skrive ‘int f(int, int) { return 7; }’.
  • UnderstĂžttelse af syntaksen ‘[[navn]]’ til definition af attributter som i C++ (‘[[gnu::const]]’, ‘[[deprecated]]’, ‘[[fallthrough]]’, ‘[[maybe_unused]]’, ‘[[nodiscard]]’, ‘[[noreturn]]’, ‘[[reproducible]]’, ‘[[unsequenced]]’). For eksempel tillader attributten [[noreturn]] at angive, at funktionen ikke returnerer vĂŠrdier (headerfilen stdnoreturn.h og specifikatoren ‘_Noreturn’ er erklĂŠret forĂŠldede).
  • UnderstĂžttelse af syntaksen u8 til definition af konstanter med tegn i UTF-8.
  • Introduceret typen char8_t til strenge og tegn med UTF-8-kodning, samt funktioner til konvertering af strenge med flermybte tegn mbrtoc8() og c8rtomb().
  • Funktionen af nĂžgleordet ‘auto’ er ĂŠndret, sĂ„ det nu fĂžrer til typeafledning ved definition af objekter, hvilket gĂžr det muligt at bruge ‘auto’ i stedet for en type til at definere typene af variabler baseret pĂ„ udtrykstypen til deres initialisering. For eksempel: ‘auto y = cos(x);’.
  • Funktioner med en tom parameterliste behandles nu som funktioner, der ikke tager argumenter.
  • UnderstĂžttelse af header-filerne og er tilfĂžjet med makroer, funktioner og typer til kontrol af heltalsberegninger.
  • Placering af switch-mĂŠrker er tilladt hvor som helst i sammensatte udtryk.
  • UnderstĂžttelse af trigraf-kode er ophĂžrt. Trigrafer, som er sekvenser af tre ASCII-tegn, der behandles som et enkelt tegn, fx sekvensen "??=", kunne bruges i stedet for "#". Efter introduktionen af Unicode er trigraf-understĂžttelse blevet meningslĂžs.
  • UnderstĂžttelse af prĂŠfikserne "0b" og "0B" til angivelse af heltal i binĂŠr form er tilfĂžjet, fx "int b = 0b101010".
  • NĂžgleordene bool, static_assert, alignas, alignof og thread_local er tilfĂžjet.
  • Angivelse af tomme parenteser "{}" til initialisering med nul-vĂŠrdier er tilladt, dvs. man kan nu skrive "struct S { int x, y } s = {};".
  • Muligheden for at angive enhver universel tegnnavn i tegn- og strengliteraler er givet. For eksempel, "int \u0024 = 0;".
  • Makroen "unreachable" er tilfĂžjet i "stddef.h".
  • Den nye type nullptr_t og konstanten nullptr tilfĂžjes til definitionen af null-pegere, der kan konverteres til enhver pointer-type og reprĂŠsentere en NULL-variant, der ikke er knyttet til heltal- eller void*-typer. For eksempel kan man angive "void func(nullptr_t); func(0); func((void *)0);".
  • Typerne "_BitInt (N)" og "unsigned _BitInt (N)" er tilfĂžjet til at definere heltal med et angivet antal bits samt decimaltaltyperne "_Decimal32", "_Decimal64" og "_Decimal128" samt funktioner til arbejde med sĂ„danne typer.
  • Muligheden for at bruge tegnet "‘" til tydelig adskillelse af positioner i tal er tilfĂžjet (fx "1’000’000").
  • Strukturer, unioner og enum typer er tilladt at definere mere end Ă©n gang i et scope med indhold, der er det samme og med gentagne tags.
  • OperatĂžrerne typeof og typeof_unqual er inkluderet i standarden.
  • UnderstĂžttelse af brugen af constexpr-specifikatoren til at definere objekter er blevet tilfĂžjet.
  • Makroerne INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX og LDBL_NORM_MAX er tilfĂžjet i header filerene float.h og math.h.
  • PrĂŠprocessor-direktiverne #elifdef, #elifndef, #warning og #embed er tilfĂžjet. "#embed" er beregnet til integration af binĂŠre ressourcer.
  • Brugen af variadic lister er blevet forenklet.
  • Mulighederne for enumerations (enum) er blevet udvidet.
  • TilfĂžjet understĂžttelse af pladsholderen «%b» til behandling af binĂŠre vĂŠrdier i printf() og scanf() funktionsfamilier.
  • Kaldet til funktionen realloc() med en stĂžrrelse pĂ„ nul er blevet klassificeret som ubestemt opfĂžrsel.
  • Funktionerne memccpy(), strdup(), strndup(), gmtime_r() og localtime_r() er blevet standardiseret.
  • Funktionerne asctime() og ctime() er blevet erklĂŠret forĂŠldede.
  • Makroerne static_assert og thread_local er blevet klassificeret som sĂžgeord.

Kilde: opennet.ru

KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster