C (ohjelmointikieli)

Wikipedia
Loikkaa: valikkoon, hakuun
C
Paradigma proseduraalinen
Tyypitys heikko, staattinen
Yleinen suoritusmalli käännetty
Muistinhallinta manuaalinen
Julkaistu 1972
Kehittäjä Dennis Ritchie
Merkittävimmät toteutukset GCC, Borland C, Visual C, Watcom C
Vaikutteet B, BCPL, Assembly
Vaikuttanut C++, D, Objective-C, C#
Murteet K&R, ANSI C, C99
Käyttöjärjestelmä alustariippumaton
Uutisryhmä comp.lang.c

C on yleiskäyttöinen, imperatiivinen ja rakenteinen käännettävä tietokoneiden ohjelmointikieli, joka on levinnyt laajalle 1970-luvulta lähtien, jolloin Dennis Ritchie kehitti sen UNIX-käyttöjärjestelmää varten. Kielessä yhdistyvät koneenläheisyys ja korkean tason kielen ominaisuudet. C:n suosiota selittää kielen yksinkertaisuus, tehokkuus, joustavuus ja siirrettävyys. C:ssä itsessään ei ole paljoa varattuja sanoja, monet toiminnot tehdään funktiokirjastoilla. C++, Java, C# ja monet muut myöhemmät kielet perustuvat syntaksiltaan ja avainsanoiltaan C:hen.

C-kieli[muokkaa | muokkaa wikitekstiä]

C perustuu Ken Thompsonin kehittämään B-kieleen. C-kieli tarkoitettiin alun perin pelkästään järjestelmäohjelmointiin, mutta se on saavuttanut suosiota myös sovellusohjelmointikielenä. C yleistyi Unixin yleistyessä ja nykyisin käytännössä kaikki järjestelmäalustat käyttävät C-kieltä järjestelmäkielenään. C-kielen merkitys näkyy myös siinä, että monet kielet muistuttavat C:tä avainsanoiltaan ja syntaksiltaan, vaikka niiden toimintaperiaate ja käyttötarkoitus olisi erilainen. Jotkin uudemmat ohjelmointikielet, kuten C++, C# ja Java, pohjautuvat C-kieleen. Ne eivät kuitenkaan ole syrjäyttäneet C-kieltä täysin. Joidenkin korkean tason ohjelmointikielten toteutukset käyttävät C-kieltä välikielenä.

C-kielellä on seuraavia ominaispiirteitä:

  • Yksinkertainen ydinkieli, jonka lisäksi keskeisiä toimintoja toteutettu kirjastoissa
  • Minimalistinen määrä varattuja avainsanoja
  • Keskeisenä periaatteena rakenteellinen proseduraalinen ohjelmointi
  • Yksinkertainen ALGOL-sukulaiskielten tapainen tyyppijärjestelmä
  • Matalan tason pääsy tietokoneen muistiin osoittimien avulla
  • Parametrien välitys aliohjelmille joko arvoina tai viitteinä käyttämällä osoittimia
  • Funktio-osoittimet, jotka mahdollistavat yksinkertaisten jatkumoiden ja ad hoc -polymorfismin käytön
  • Leksikaalinen muuttujien määrittelyalue (lexical variable scoping)
  • Tietueet, käyttäjän luomat datatyypit (struct-avainsana) joiden avulla toisiinsa liittyviä muuttujia voidaan käsitellä yhdessä
  • Esikääntäjä (C Preprocessor), jonka avulla voidaan mm. yhdistää useissa tiedostoissa sijaitsevaa lähdekoodia ja määritellä makroja

Yksinkertaisuuden tavoittelun vuoksi C-kielestä puuttuu suora tuki monille muista kielistä löytyville ominaisuuksille. Näitä ovat mm. vahva tyypitys (type safety), roskienkeräys, funktioiden ja operaattoreiden ylikuormitus, tuki säikeille, listojenkäsittely ym. Tosin useimmat näistä ominaisuuksista voidaan ohjelmoida C-kielellä epäsuorasti.

Standardit[muokkaa | muokkaa wikitekstiä]

The C Programming Language

Alkuperäinen standardi C-ohjelmointikielestä tunnetaan nimellä K&R. Se perustuu kirjaan The C Programming Language, jonka Kerninghan ja Ritchie julkaisivat 1978.

Vuonna 1983 ANSI perusti X3J11-komitean standardoimaan C. Standardit koskevat paitsi itse kielen semantiikkaa ja syntaksia, myös eräitä peruskirjastoluokkia, jotka tulevat yleensä kunkin valmistajan toimittaman kääntäjän mukana. Suurin osa standardista perustuu Unix-ympäristössä käytettyyn C:hen, kuitenkin se osa Unixin C-kirjastosta, jota ei voi toteuttaa muissa ympäristöissä siirrettiin IEEE:lle ja siitä tuli osa POSIX-standardia.

ANSI X3.159-1989 julkaistiin 1989 ja tunnetaan myös nimillä ANSI C ja C89. Myös ISO julkasi saman standardin nimellä ISO/IEC 9899:1990.

C-standardia laajennettiin 1990-luvun lopussa jolloin syntyi ISO/IEC 9899:1999, joka myös tunnetaan nimellä C99.

C99[muokkaa | muokkaa wikitekstiä]

C99 toi C:hen mm.:

  • inline-funktiot
  • restrict-avainsana muuttujien optimointia varten
  • uusia tietotyyppejä kuten long long int ja _Bool, _Complex ja _Imaginary
  • C++ tyyppiset //-alkuiset kommentit
  • muuttajia ei tarvise määritellä enää lohkon alussa
  • automaattisen taulukkomuuttujan varaus parametrin avulla
  • 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

C11[muokkaa | muokkaa wikitekstiä]

Vuonna 2007 standardista alettiin kehittää seuraava versiota joka julkaistiin 8.12.2012. Tämä tunnetaan nimellä C11.

  • avainsanat tietotyyppien pakkaukselle (alignment)
  • _Noreturn-määritys funktioille
  • geneeriset makrot _Generic-avainsanan avulla
  • tuki säikeistykselle ja atomisuudelle (_Thread_local, <threads.h>, _Atomic ja <stdatomic.h>)
  • parannettu Unicode-tuki (char16_t, char32_t, <uchar.h>, u8-literaalit)
  • gets-funktio poistettu vaarallisena
  • anonyymit structit ja unionit (struct T { int tag; union { float x; int n; }; };)
  • makrot liukulukujen tyyppien tarkasteluun
  • makrot imaginaarilukujen luomista varten
  • _Static_assert testitapauksien laatimista varten
  • quick_exit-funktio
  • suuri joukko mm. printf-, scanf ja str*-perheen funktioita on korvattu _s-päätteisillä joilla voidaan korvata pienellä vaivalla tietoturvaltaan kyseenalaisia funktioita (Annex K)[1]
  • analysoitavuus (Annex L)

C11 sallii toteutukset joissa osaa standardista ei ole toteutettu. Valinnaisia osia ovat kompleksiluvut, IEC 60559 -liukuluvut, säikeistys ja atomisuus ja liitteet K ja L.

Esimerkkiohjelma[muokkaa | muokkaa wikitekstiä]

Esimerkkiohjelma, joka kysyy käyttäjältä kaksi lukua ja tulostaa niiden summan.

#include <stdio.h>
int main(void)
{
    int a, b, c;
    printf("Anna 1. luku:\n");
    scanf("%d", &a);
    printf("Anna 2. luku:\n");
    scanf("%d", &b);
    c = a + b;
    printf("Antamiesi lukujen summa on %d\n", c);
    return 0;
}

Lähteet[muokkaa | muokkaa wikitekstiä]

  • Aitken - Jones: Opeta itsellesi C-ohjelmointi. Jyväskylä: Suomen Atk-kustannus Oy, 1997.

Viitteet[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]

Wikibooks
Wikikirjastossa on aihe: C.