C99 (ent. C9X) on C-kielen versio, joka on ISO-standardi ISO/IEC 9899:1999 (1999).[1]
Versio laajentaa C90 (1990) ominaisuuksia. Versio on korvattu C11 (2011) versiolla.[2]
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[3]
- ISO/IEC 9899:1999/Cor 2:2004[4]
- ISO/IEC 9899:1999/Cor 3:2007[5]
Ominaisuudet
Uudessa standardissa on lisätty ja kehitetty ominaisuuksia:[1]
- inline funktioiden tuki
- uusia datatyyppejä tyyppijärjestelmään:
long long int
, boolean-tietotyyppi bool
, sekä complex
tietotyyppi[6]
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
.[7]
Esimerkiksi ennen C99:ää voi olla:[7]
extern x;
f(y)
{
register z = g(x) + y;
return z;
}
.. jossa x
, y
ja z
käsiteltiin tyyppinä int
.[7]
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:[8]
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.[8]
Aiemmin on käytetty yhden elementin pituisia taulukkoja.[9] GCC-kääntäjässä on laajennus, joka tukee nolla-pituisia taulukkoja sekä se tukee C99-standardin mukaisia joustavia taulukkoja.[10]
Joustavilla taulukoilla voidaan välttää tiettyjä virheitä.[11]
Lähteet
Aiheesta muualla