C99

Från Wikipedia
Hoppa till: navigering, sök

C99, formellt ISO/IEC 9899:1999, är en standard för programspråket C som är en utökning av den tidigare standarden C90 (ISO/IEC 9899:1990; även känd som ANSI C eller C89). C99 ersattes i december 2011 av C11.

Bakgrund[redigera | redigera wikitext]

Efter att C hade standardiserats av ANSI (1989) och ISO (1990) avstannade utvecklingen av språket. Ett tillägg kom 1995 med Normative Addendum 1, men utan några stora förändringar i själva språket. Samtidigt utvecklades C++ snabbt. Under slutet av 1990-talet började arbetsgruppen ISO/IEC JTC1/SC22/WG14 arbetet med att ytterligare revidera standarden. 1999 publicerades den färdiga standarden ISO/IEC 9899:1999. Den antogs av ANSI i maj 2000.

C99 har rättats och justerats tre gånger (2001, 2004 och 2007).

Skillnader mot C90[redigera | redigera wikitext]

C99 är mestadels bakåtkompatibel med C90 så att de flesta program skrivna mot C90 kan kompileras som C99, men är något striktare i vissa avseenden. Detta gäller i synnerhet funktionsdeklarationer, vars returvärde och parametrar måste vara explicit typdeklarerade. I C90 antogs de vara av typen int om inget annat angavs. Några av de övriga ändringarna är:

  • Inline-funktioner (funktioner vars kod infogas i stället för att de anropas).
  • Variabeldeklarationer behöver inte längre ske i början av ett kodblock.
  • Nya datatyper; bland dem long long int, _Bool och _Complex.
  • Listor av variabel längd.
  • Radkommentarer (som inleds med //).
  • Utökat funktionsbibliotek, bland annat snprintf.
  • Typgeneriska matematikfunktioner.
  • Förbättrat stöd för IEEE 754-2008 (flyttal).

Några av utökningarna kommer från C++, bland annat radkommentarer (som också finns i BCPL, men som togs bort till B och C) och inline-funktioner. Andra utökningar har senare föreslagits för C++.

Kompilatorstöd[redigera | redigera wikitext]

De flesta moderna C-kompilatorer stödjer större delen av C99, men bara ett fåtal stödjer den till fullo. Microsoft Visual C++ utmärker sig genom att dess C-kompilator inte stödjer C99 alls.