GCC 15 do të përdorë standardin C23 si parazgjedhje

Në bazën e kodit, mbi të cilën është formuluar versioni i planifikuar për pranverën e vitit të ardhshëm të paketës së kompajlerëve GCC 15, është miratuar një ndryshim, i cili përfshin përdorimin standard të C23 me zgjerimet GNU («-std=gnu23») për kompilimin e programeve në gjuhën C (më parë, standardi C17 ishte përdorur si standard i parazgjedhur - «-std=gnu17»). Ky ndryshim mund të sjellë probleme gjatë ndërtimit të projekteve ekzistuese, pasi në standardin e ri ka dallime, si shtimi i konstantës nullptr, tipit _BitInt(n) dhe fjalëve kyçe bool, true dhe false, të cilat mund të bien në konflikt me identifikuesit e njëjtë të caktuar në aplikacione.

Standarti C23 (ISO/IEC 9899:2024) u publikua zyrtarisht nga organizata ndërkombëtare për standardizim (ISO) më 31 tetor 2024. Ndër ndryshimet në standardin e ri janë:

  • ËshtĂ« hequr mundĂ«sia e pĂ«rcaktimit tĂ« funksioneve nĂ« stilin K&R C, i pĂ«rdorur para miratimit tĂ« specifikimit ANSI C dhe i pĂ«rshkruar nĂ« librin «The C Programming Language» tĂ« Kernighan dhe Ritchie. Stili K&R pĂ«rfshin pĂ«rshkrimin e tipeve tĂ« argumenteve pas pĂ«rcaktimit tĂ« funksionit, pĂ«r shembull, «int add(a, b) int a, b; {}»
  • Parametrat e paemĂ«rtuar tĂ« funksioneve - nuk Ă«shtĂ« e detyrueshme tĂ« specifikohen emrat e parametrave tĂ« pashfrytĂ«zuar gjatĂ« pĂ«rcaktimit tĂ« funksioneve (si nĂ« C++). PĂ«r shembull, tani mund tĂ« shkruajmĂ« «int f(int, int) { return 7; }».
  • PĂ«rshtatja e sintaksĂ«s «[[emri]]» pĂ«r pĂ«rcaktimin e atributeve si nĂ« C++ («[[gnu::const]]», «[[deprecated]]», «[[fallthrough]]», «[[maybe_unused]]», «[[nodiscard]]», «[[noreturn]]», «[[reproducible]]», «[[unsequenced]]»). PĂ«r shembull, atributi [[noreturn]] lejon tĂ« specifikohet se funksioni nuk kthen vlera (skedari i titullit stdnoreturn.h dhe specifikuesi «_Noreturn» janĂ« shpallur tĂ« vjetĂ«ruar).
  • MbĂ«shtetje pĂ«r sintaksĂ«n u8» pĂ«r pĂ«rcaktimin e konstantave me simbole nĂ« UTF-8.
  • Shtuar tipi char8_t pĂ«r stringje dhe simbole nĂ« kodimin UTF-8, si dhe funksionet pĂ«r konvertimin e stringjeve me simbole multi-byte mbrtoc8() dhe c8rtomb().
  • Modifikuar veprimi i fjalĂ«s kyçe «auto», e cila tani çon nĂ« nxjerrjen e tipit gjatĂ« pĂ«rcaktimit tĂ« objekteve, duke lejuar pĂ«rdorimin e shenjĂ«s «auto» nĂ« vend tĂ« tipit pĂ«r pĂ«rcaktimin e tipit tĂ« variablave nĂ« bazĂ« tĂ« tipit tĂ« shprehjes pĂ«r inicializimin e tyre. PĂ«r shembull: «auto y = cos(x);».
  • Funksionet me njĂ« listĂ« tĂ« zbrazĂ«t argumentesh tani trajtohen si funksione qĂ« nuk pranojnĂ« argumente.
  • Shtesa e mbĂ«shtetjes pĂ«r skedarĂ«t e titujve dhe me makros, funksione dhe lloje pĂ«r verifikimin e llogaritjeve tĂ« numrave tĂ« plotĂ«.
  • Lejohet vendosja e etiketave tĂ« kalimit nĂ« çdo vend brenda shprehjeve tĂ« pĂ«rbĂ«ra.
  • MbĂ«shtetje pĂ«r tri-grafĂ«t Ă«shtĂ« ndaluar nĂ« kod, sekuenca nga tre simbole ASCII tĂ« trajtuara si njĂ« simbol, pĂ«r shembull, sekuenca «??=» mund tĂ« pĂ«rdoret nĂ« vend tĂ« «#». Pas shfaqjes sĂ« Unicode, mbĂ«shtetje pĂ«r tri-grafĂ«t ka humbur kuptimin.
  • Shtesa e mbĂ«shtetjes pĂ«r prefiksin «0b» dhe «0B» pĂ«r tregimin e vlerave tĂ« plota nĂ« formĂ«n binare, pĂ«r shembull, «int b = 0b101010».
  • Shtuar fjalĂ« kyçe bool, static_assert, alignas, alignof dhe thread_local.
  • Lejohet spesifikimi i kllapa tĂ« zbrazĂ«ta «{}» pĂ«r inicializim nĂ« vlera tĂ« zeros, dmth tani mund tĂ« shkruhet «struct S { int x, y } s = {};».
  • Ofruar mundĂ«sia pĂ«r tĂ« specificuar çfarĂ«do emra universale simbolesh nĂ« letĂ«rsi karakteresh dhe vargjet. PĂ«r shembull, «int \u0024 = 0;».
  • NĂ« «stddef.h» Ă«shtĂ« shtuar makroja «unreachable».
  • Shtuar njĂ« tip tĂ« ri nullptr_t dhe konstantĂ«n nullptr pĂ«r pĂ«rcaktimin e treguesve tĂ« zeros, tĂ« cilĂ«t mund tĂ« konvertohen nĂ« çdo tip tregues dhe tĂ« pĂ«rfaqĂ«sojnĂ« variantin NULL, tĂ« papĂ«r lidhur me tipat e plotĂ« dhe tipin void*. PĂ«r shembull, mund tĂ« specikohet «void func(nullptr_t); func(0); func((void *)0);».
  • Shtuar llojet «_BitInt (N)» dhe «unsigned _BitInt (N)» pĂ«r pĂ«rcaktimin e numrave tĂ« plotĂ« me njĂ« numĂ«r tĂ« caktuar bitĂ«sh, si dhe llojet nĂ« notĂ«n dhjetore me pikĂ« tĂ« lĂ«vizshme «_Decimal32», «_Decimal64» dhe «_Decimal128» dhe funksionet pĂ«r tĂ« punuar me kĂ«to lloje.
  • Shtuar mundĂ«sia e pĂ«rdorimit tĂ« simbolit «‘» pĂ«r tĂ« ndarĂ« vizualisht numrat nĂ« shifra (pĂ«r shembull, «1’000’000»).
  • Strukturat, bashkĂ«sitĂ« dhe enumerimet lejohet tĂ« pĂ«rcaktohen mĂ« shumĂ« se njĂ« herĂ« nĂ« njĂ« fushĂ« tĂ« caktuar me tĂ« njĂ«jtin pĂ«rmbajtje dhe etiketĂ« pĂ«rsĂ«ritĂ«se.
  • NĂ« standard u pĂ«rfshinĂ« operatorĂ«t typeof dhe typeof_unqual.
  • Ka filluar mbĂ«shtetje pĂ«r pĂ«rdorimin e specifikuesit constexpr pĂ«r pĂ«rcaktimin e objekteve.
  • NĂ« skedarĂ«t e titujve float.h dhe math.h janĂ« shtuar makros INFINITY, NAN, FLT_NORM_MAX, DBL_NORM_MAX dhe LDBL_NORM_MAX.
  • Shtuar direktivat e preprocessorit #elifdef, #elifndef, #warning dhe #embed. «#embed» Ă«shtĂ« e destinuar pĂ«r integrimin e burimeve binare.
  • PĂ«rmirĂ«suar pĂ«rdorimin e listave me numĂ«r tĂ« variuar argumentesh (variadic).
  • Zgjeruar mundĂ«sitĂ« e enumerimeve (enum).
  • Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r ndĂ«rrimin «%b» pĂ«r pĂ«rpunimin e vlerave binare nĂ« familjet e funksioneve printf() dhe scanf().
  • Thirrja e funksionit realloc() me madhĂ«si zero Ă«shtĂ« klasifikuar si sjellje e paqartĂ«.
  • Funksionet memccpy(), strdup(), strndup(), gmtime_r() dhe localtime_r() janĂ« standardizuar.
  • Funksionet asctime() dhe ctime() janĂ« shpallur tĂ« vjetra.
  • Makrostatic_assert dhe thread_local janĂ« klasifikuar si fjalĂ« kyçe.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster