C99

ohjelmointikieli

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 muokkaa

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 muokkaa

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

  1. a b ISO/IEC 9899:1999 iso.org. Viitattu 26.1.2017.
  2. ISO/IEC 9899:2011 iso.org. Viitattu 26.1.2017.
  3. https://www.iso.org/standard/35952.html
  4. https://www.iso.org/standard/41326.html
  5. https://www.iso.org/standard/50510.html
  6. Boolean type support library en.cppreference.com. Viitattu 8.2.2017.
  7. 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)
  8. a b Flexible array members ibm.com. 14.4.2021. Viitattu 28.9.2022. (englanniksi)
  9. Raymond Chen: Why do some structures end with an array of size 1? devblogs.microsoft.com. 26.8.2004. Viitattu 28.9.2022. (englanniksi)
  10. 6.18 Arrays of Length Zero gcc.gnu.org. Viitattu 28.9.2022. (englanniksi)
  11. Zero-length and one-element arrays kernel.org. Viitattu 28.9.2022. (englanniksi)

Aiheesta muualla muokkaa