Hoppa till innehållet

C11

Från Wikipedia
För vagntypen C11, se C11 (manövervagn).

C11, formellt ISO/IEC 9899:2011,[1] är en äldre (2011) standard för programspråket C. Under standardiseringsarbetet kallades den nya versionen för C1X. Det sista utkastet antogs officiellt av ISO som standard den 8 december 2011 och ersätter den tidigare standarden C99. C11 ersätts av standarden C17 (ISO/IEC 9899:2018) sedan juni 2018.[2]

C11 standardiserar främst funktioner som redan har brett stöd bland C-kompilatorer. En stor nyhet är att ett bibliotek för trådning har införts. Samtidigt har flera funktioner gjorts frivilliga, så att en C-kompilator inte behöver stödja dem.

Ändringar från C99

[redigera | redigera wikitext]

Bland tilläggen från den förra versionen, C99, i språket och biblioteken finns:

  • Ett system för att specificera och testa minnesjustering av data, vilket inkluderar nyckelorden _Alignas och alignof.
  • Nyckelordet _Noreturn, som specificerar att en funktion inte kommer att returnera.
  • Typgeneriska uttryck med hjälp av nyckelordet _Generic.
  • Stöd för trådning genom biblioteken <threads.h> och <stdatomic.h>, samt nyckelorden _Thread_local och _Atomic.
  • Förbättrat stöd för Unicode.
  • Icke namngivna struct- och union-strukturer.
  • Statiska tester (assertions) som till skillnad från preprocessorn har tillgång till bland annat variabeltyper.
  • Fillåsning.

Utöver dessa tillägg har funktionen gets tagits bort till förmån till den säkra funktionen gets_s.

Frivilliga funktioner

[redigera | redigera wikitext]

C11 tillåter implementationer att utelämna vissa delar av standarden, även sådana som var obligatoriska i C99. Ett program kan använda makron för att testa om en funktion finns tillgänglig vid kompileringen. Ett exempel är stödet för komplexa typer, som är frivilligt i C11 men ett krav för C99-kompatibilitet. För att testa i fall en kompilator har stöd för komplexa typer och biblioteket <complex.h> kan man testa om makrot __STDC_NO_COMPLEX__ är definierat.

Externa länkar

[redigera | redigera wikitext]
  • N1570, det sista utkastet av C1X, 12 april 2011