C99
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.