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:
- 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-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
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
- ↑ 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)
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