C99
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:
Ominaisuudet
[muokkaa | muokkaa wikitekstiä]Uudessa standardissa on lisätty ja kehitetty ominaisuuksia:[1]
- inline funktioiden tuki
- uusia datatyyppejä tyyppijärjestelmään:
long long int
, boolean-tietotyyppibool
, 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 kutensnprintf
- 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
[muokkaa | muokkaa wikitekstiä]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
[muokkaa | muokkaa wikitekstiä]- ↑ a b ISO/IEC 9899:1999 iso.org. Viitattu 26.1.2017.
- ↑ ISO/IEC 9899:2011 iso.org. Viitattu 26.1.2017.
- ↑ https://www.iso.org/standard/35952.html
- ↑ https://www.iso.org/standard/41326.html
- ↑ https://www.iso.org/standard/50510.html
- ↑ Boolean type support library en.cppreference.com. Viitattu 8.2.2017.
- ↑ a b c Randy Meyers: The New C: Integers in C99, Part 1 1.12.2000. Dr. Dobb's. Arkistoitu Viitattu 19.6.2019. (englanniksi)
- ↑ a b Flexible array members ibm.com. 14.4.2021. Viitattu 28.9.2022. (englanniksi)
- ↑ Raymond Chen: Why do some structures end with an array of size 1? devblogs.microsoft.com. 26.8.2004. Viitattu 28.9.2022. (englanniksi)
- ↑ 6.18 Arrays of Length Zero gcc.gnu.org. Viitattu 28.9.2022. (englanniksi)
- ↑ Zero-length and one-element arrays kernel.org. Viitattu 28.9.2022. (englanniksi)