MITÄ ON C-KIELI

C-ohjelmointikieli on Dennis Ritchien 1970-luvun alussa kehittämä sittenmin stardardisoitu ohjelmointikieli ja alkujaan kehitettiin UNIX-käyttöjärjestelmän järjestelmäohjelmointia varten. Nykyisin edelleen useat järjestelmäalustat käyttävät C-kieltä järjestelmäkielenään. Monet uudemmat ohjelmointikielet pohjautuvat C-kieleen, kuten C++, C# ja Java. Wikipedia tietää C-kielen ominaispiirteistä seuraavaa:

- 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 adhoc-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

Jaha, menihän heti vaikeaksi, eikö vaan ?

C-kieli on ohjelmointikieli, jota käytetään erilaisten mikroprosessoripohjaisten laitteiden ohjelmointikielenä. C-kielellä voidaan rakentaa eli ohjelmoida laitteelle käyttöjärjestelmä, esimerkiksi tablet-tietokoneelle tai puhelimeen. C-kielellä voidaan toteuttaa vaikkapa mikroprosessoripohjalle auton ajotietokone.

C-OHJELMAN OSAT, ensimmäinen C-ohjelma

Esimerkkiohjelma pyytää käyttäjältä ympyrän sädettä ja laskee ympyrän pinta-alan. Lopuksi ohjelma esittää lasketun tuloksen.

/* Ohjelma laskee ympyrän pinta-alan ver. 1.0*/ #include <stdio.h> #define PI 3.1415 int main() { float ala, sade; /* ala = pinta-ala, sade = säde*/ printf(”Anna sade:”); scanf(”%f”, &sade); ala = PI * sade * sade; printf(”\nPinta-ala on %f\n”, ala); return 0; }




Example pic
C-ohjelma-esimerkki (yllä) koostuu osista. Osina ovat:

- kommentit (oranssi), ohjelmoitsijan muistiinpanot
- ilmoitukset kääntäjälle eli esikäsittelysäännöt (sininen)
- pääohjelma aloitus ja lopetus rutiinit (vihreä)
- ohjelmassa tarvittavien muuttujien eli tiedon tallennuspaikkojen nimeäminen (punainen)
- varsinainen ohjelma (lila/violetti).


KOMMENTTI

Ohjelmnoitsija voi kirjoittaa ohjelmakoodin sekaan kommentteja. Komenttien tarkoituksena on helpottaa ohjelmakoodin ymmärtämistä, erityisesti silloin kun joku toinen joutuu sitä lukemaan. Kääntäjän ei huomioi kommentteja siten kommentit eivät ole suoritettavaa ohjelmakoodia vaan ohjelmoitsijan muistiinpanoja, joten kommenttit ei vaikuta ohjelman kokoon eikä ohjelman suoritusaikaan. Kommenttien käyttäminen ei ole pakollista, eivätkä ne vaikuta ohjelmien sisältämien tehtävien suoritukseen. Kommentteja voidaan käyttää vapaasti kaikkialla ohjelmassa helpottamaan ohjelmakoodin ymmärtämistä.
Kommentti-merkeillä voi poistaa käytöstä ohjelmakoodista osia. Ohjelman osien ottamisella pois käytöstä on oma käyttönsä testatessa, virheen etsimisessä ja vaikkapa erilaisien ohjelma-versioiden ohjelmoinnissa.

On kaksi tapaa C-kielessä kertoa kääntäjälle kyseessä olevan kommentti:

// komenttiteksti, kaksi kenoviivaa joilloin kyseinen rivi on kommentti.

/*kommenttiteksti, keno-tähti - tähti-keno merkkiyhdistelmä, jolloin kommenttia on useita rivejä, alla esimerkki. */

Kommentti alkaa merkkiyhdistelmällä /*
ja
päättyy merkkiyhdistelmään */.

Kääntäjä ei huomioi ohjelmakoodiksi merkkejä eli tekstiä jotka ovat merkkiyhdistelmien välissä . Kommenttien tulisi olla asiallia esim. ohjelman alussa kirjoittajan nimi, ohjelman kirjoituspäivämäärä ja ohjelman versio-tiedot.

/* Ohjelma laskee ympyrän pinta-alan ver. 1.0*/ float ala, sade; /* ala = pinta-ala, sade = säde*/

Esimerkki ohjelmassa, ylemmän kommentin viestinä on esitellä esimerkki-ohjelma ja sen versio. Alemmassa kommentissa tarkennetaan ns muuttujien käyttötarkoitusta.


ESIKÄSITTELYSÄÄNNÖT

Ohjelman lähdekoodin alkuun lisätään erilaisia ohjeita C-kääntäjälle. Näitä ohjeita ovat esimerkiksi esikäsittelysäännöt, joiden avulla voidaan laajentaa C:n käyttöaluetta. Esikäsittelysäännöt alkavat risuaitamerkillä (#). Esikäsittelysäännöt tulkitaan ennen käännösprosessin alkamista ja yleensä ne sijoitetaan ohjelman alkuun muiden sääntöjen kanssa.

#include <stdio.h> #define PI 3.1415

#include <stdio.h> viestii C-kääntäjälle ohjelmassa käytettävän kääntäjän omia valmiita funktioita stdio.h -tiedostosta. #include -määrittelyt sijaitsevat ohjelmakoodin alussa.

#define PI 3.1415 määrittelee tekstin PI tarkoittavan vakioarvoa sekä PI-tekstin kaikkialla ohjelmassa tarkoittavan lukua 3,1415.


PÄÄOHJELMA, main ( )

Jokainen C-ohjelma koostuu yhdestä (pääohjelmasta) tai useammasta funktiosta (pääohjelmasta ja aliohjelmista). Pääohjelma tunnistetaan sanasta main. Kääntäjä tunnistaa pääohjelman funktion nimeä seuraavista sulkumerkeistä. Funktion alkamista ja loppumista merkitään aaltosuluilla eli pääohjelma kirjoitetaan aaltosulkkumerkkien { } väliin. Funktion nimen edessä oleva avainsana kertoo kääntäjälle millaisen arvon funktio palauttaa int main(). Varsinainen ohjelma-koodi kirjoitetaan aaltosulkumerkkien väliin.

int main() { /*varsinainen ohjelma tähän väliin*/ }


MUUTTUJIEN MÄÄRITTELEMINEN

Esimerkkiohjelmassa funktion main() määrittelyn sisällä on esitelty kaksi liukulukumuuttujaa (float) nimeltään ala ja sade. Muuttujiksi kutsutaan "paikkoja" joihin voidaan tallentaa tietoa.
Avainsana float kertoo, että muuttujat voivat ottaa vastaan liukulukuarvoja eli desimaalilukuja. Muuttujien nimillä ohjelmoitsija kuvaa niihin ohjelman suorituksen aikana tallenettavaa asiaa, kuten esimerkissä laskussa käytettävää ympyrän sädettä ja laskun lopputuloksena saatavaa pinta-alaa.

float ala, sade;


OHJELMASTA NÄYTÖLLE TULOSTAMINEN

Tekstin esittäminen käytetylle tulostuslaitteelle eli näytölle tapahtuu funktiolla eli komennolla printf(). Kaarisulkeiden ja lainnausmerkkien väliin kirjoitetaan näytölle haluttava teksti. Aiemmin sisällytetty otsikkotiedosto stdio.h määrittelee standardit I/O-funktiot.

printf(”Anna sade: ”);


Alla, printf-funktiossa tehdään näytöllä ensin rivinvaihto \n ohjausmerkillä, sen jälkeen tulostuva teksti jonka perään %f ohjausmerkin kohdalle tulostetaan pilkun jälkeen olevassa ala-muuttujassa oleva arvo. Lopuksi vielä tehdään rivinvaihto.

printf(”\nPinta-ala on %f\n”, ala);


NÄPPÄIMISTÖLLÄ KIRJOITETUN TIEDON LUKEMINEN

Esimerkkiohjelmassa on käytetty funktiota scanf() syötetyn tiedon vastaanottamiseen ohjelmaan. Funktiota scanf() voidaan käyttää syötettäessä numero- tai merkkitietoa tai niiden yhdistelmiä. Funktio palauttaa oikein annettujen tietojen lukumäärän. Kutsuttaessa funktiota scanf() viedään funktiolle kaksi parametria. Ensimmäinen on ohjausmerkkijono ja se esiintyy lainausmerkkien sisällä. Ohjausmerkkijono kertoo kääntäjälle mitä tyyppiä halutaan syöttötiedon olevan (%f liukulukumuoto). Toinen parametri määrittää muuttujan, joka ottaa vastaan syötetyn arvon (& muuttujannimi).

scanf(”%f”, &sade);


OHJELMAN RUNKO

Ohjelman suorittama laskentaosuus tehdään lauseella:

area = PI * sade * sade;

Todellisuudessa PI on esikäsittelysääntö, joka korvataan numerolla 3.1415. Yhdisteleminen tapahtuu siten, että arvolla 3.1415 kerrotaan muuttujaan sade talletettu luku ja tulo kerrotaan uudelleen muuttuja sade arvolla. Saata tulos talletetaan muuttujaan ala. Tuloksen esittämiseen käyttäjälle käytetään funktiota printf().

printf(”Pinta-ala on %f\n”, ala);

Funktiolle viedään kaksi parametria, merkkijono jossa muotoilumerkillä %f esitetään numero liukulukumuodossa näytöllä. Toinen parametri on muuttuja joka sisältää esitettävän numeron. Erikoismerkki \n on palautusmerkki, joka siirtää kursorin näytöllä seuraavan rivin alkuun, eli tekee näytöllä rivinvaihdon.


FUNKTIOSTA PALUU

Viimeinen komento ohjelman sisällä ennen sulkevaa aaltosulkua on:

return 0;

Komento return lopettaa funktion kulun ja tässä tapauksessa palauttaa ohjauksen käyttöjärjestelmälle välittäen sille paluuarvon. Funktion main() loppuessa paluuarvo esittää virhekoodia. Paluuarvo 0 kertoo ettei mitään virhettä tapahtunut. ANSI-määrittely vaatii, että funktion main() on palautettava kokonaislukuarvo. Useimmat kääntäjät sallivat funktion main() määrittelyn ilman paluuarvoa.