C99

Tämän päivän artikkelissa käsittelemme aihetta C99, aihe, joka on viime aikoina herättänyt suurta kiinnostusta ja keskustelua. C99 on ollut vuosien ajan tutkimuksen ja analyysin kohteena eri aloilla, mikä on herättänyt asiantuntijoiden, ammattilaisten ja suuren yleisön kiinnostusta. Sen merkitys nykytilanteessa on kiistaton, ja sen vaikutus on tuntunut yhteiskunnan eri puolilla. Siksi tässä artikkelissa ehdotamme, että tutkimme perusteellisesti ja analysoimme yksityiskohtaisesti kaikki C99:n osa-alueet, jotta voimme tarjota täydellisen ja päivitetyn näkemyksen tästä erittäin tärkeästä aiheesta.

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

  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