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

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

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

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.