C99

C99 (ent. C9X) on C-kielen versio, joka on ISO-standardi ISO/IEC 9899:1999 (1999).

Versio laajentaa C90 (1990) ominaisuuksia. Versio on korvattu C11 (2011) versiolla.

Standardissa on määritelty tukea eräissä muissa kielissä yleistyneille toiminnoille ja mm. päivitetty tietotyyppien tukea.

Standardille on julkaistu kolme korjausta:
 ISO/IEC 9899:1999/Cor 1:2001
 ISO/IEC 9899:1999/Cor 2:2004
 ISO/IEC 9899:1999/Cor 3:2007

Ominaisuudet 

Uudessa standardissa on lisätty ja kehitetty ominaisuuksia:
 inline funktioiden tuki
 uusia datatyyppejä tyyppijärjestelmään: long long int, boolean-tietotyyppi bool, sekä complex tietotyyppi
 restrict-avainsana muuttujien optimointia varten
 C++ tyyppiset //-alkuiset kommentit
 muuttujia ei tarvise määritellä enää lohkon alussa
 automaattisen taulukkomuuttujan varaus parametrin avulla (ns. VLA, Variable Length Array)
 makrot vaihtelevanpituisin argumentein
 uusia funktiokirjastoja <stdbool.h>, <complex.h>, <tgmath.h>, <inttypes.h> ja funktioita kuten snprintf
 määritellyn levyiset kokonaisluvut
 parannettu tuki IEEE-liukuluvuille
 escape-koodit Unicode-merkeille

C99 vaatii toteutusta antamaan diagnostiikan kun tietotyyppinä on implisiittisesti kokonaislukutyyppi int.
Esimerkiksi ennen C99:ää voi olla:
extern x;
f(y)
{
    register z = g(x) + y;
    return z;
}
.. jossa x, y ja z käsiteltiin tyyppinä int.

Joustavat taulukot 
C99:ssä on määritelty joustavan kokoiset taulukkojäsenet viimeisenä elementtinä struct-tietueille, joilla on useampi kuin yksi nimetty jäsenmuuttuja. Joustavat taulukot ovat määritellään tyhjänä indeksinä, jolla viitataan muuttuvapituiseen tietoon muodossa taulukon_tunniste[]. Esimerkiksi:
struct Foo {
   int a;
   int b[];
};
.. jossa b on muuttuvapituinen taulukko.
Koska muuttuvapituinen taulukko on epätäydellinen tyyppi sen kokoa ei saa selville sizeof-operaattorilla.

Aiemmin on käytetty yhden elementin pituisia taulukkoja. GCC-kääntäjässä on laajennus, joka tukee nolla-pituisia taulukkoja sekä se tukee C99-standardin mukaisia joustavia taulukkoja.
Joustavilla taulukoilla voidaan välttää tiettyjä virheitä.

Lähteet

Aiheesta muualla 
 Final version of the C99 standard with corrigenda TC1, TC2, and TC3 included, formatted as a draft
 Rationale for International Standard—Programming Languages—C Revision 5.10

C