58127-1 C-ohjelmointi - Syksy 2001
Sisällys:
- 1 Johdanto
- 2 Ensimmäinen C-ohjelma
- 3 Syöttö ja tulostus
- 4 Taulukot
- 5 Merkkiliteraalit ja merkkijonot
- 6 Funktiot ja ohjelman rakenne
- 7 Osoittimet
- 8 Rakenteet ja Dynaaminen muistinhallinta
- 9 Muita C-kielen piirteitä
- 10 Tiedostot
- 11 Linux/UNIX-ohjelmointi (tulossa !)
- GCC-ohje
- Kertausta
1 Johdanto
C on yleiskäyttöinen ohjemointikieli, jota käytetään erilaisissa ympäristöissä pienistä tietokoneista suuriin järjestelmiin. C on matalan tason kieli, johon ei kuulu esim. I/O ja merkkijonojen käsittely. ANSI-standardin mukaisen C-kääntäjän mukana tulee standardikirjastot, joista saadaan funktiot mm. merkkijonoille. C-ohjelma rakentuu kahdesta osasta: joukosta lähdekooditiedostoja (päättenä .c) ja joukosta alustustiedostoja (päätteenä .h). C: tärkeimpiin ominaisuuksiin kuuluu:
- Kontrollirakenteet: peräkkäisyys, ehdollisuus, toisto, vaihtoehdoista
valinta, toiston keskeytys
- Funktiot: voivat palauttaa arvon tai rakenteisen tyypin, voidaan
kutsua rekursiivisesti
- Makrot: alustustiedostot, makromäärittelyt, ehdollinen kääntäminen
#define DIT ( #define DAH ) #define __DAH ++ #define DITDAH * #define DAHDIT for #define DIT_DAH malloc #define DAH_DIT gets #define _DAHDIT char _DAHDIT _DAH_[]="ETIANMSURWDKGOHVFaLaPJBXCYZQb54a3d2f16g7c8a90l?e'b.s;i,d:" ;main DIT DAH{_DAHDIT DITDAH _DIT,DITDAH DAH_,DITDAH DIT_, DITDAH _DIT_,DITDAH DIT_DAH DIT DAH,DITDAH DAH_DIT DIT DAH;DAHDIT DIT _DIT=DIT_DAH DIT 81 DAH,DIT_=_DIT __DAH;_DIT==DAH_DIT DIT _DIT DAH;__DIT DIT'\n'DAH DAH DAHDIT DIT DAH_=_DIT;DITDAH DAH_;__DIT DIT DITDAH _DIT_?_DAH DIT DITDAH DIT_ DAH:'?'DAH,__DIT DIT' 'DAH,DAH_ __DAH DAH DAHDIT DIT DITDAH DIT_=2,_DIT_=_DAH_; DITDAH _DIT_&&DIT DITDAH _DIT_!=DIT DITDAH DAH_>='a'? DITDAH DAH_&223:DITDAH DAH_ DAH DAH; DIT DITDAH DIT_ DAH __DAH,_DIT_ __DAH DAH DITDAH DIT_+= DIT DITDAH _DIT_>='a'? DITDAH _DIT_-'a':0 DAH;}_DAH DIT DIT_ DAH{ __DIT DIT DIT_>3?_DAH DIT DIT_>>1 DAH:'\0'DAH;return DIT_&1?'-':'.';}__DIT DIT DIT_ DAH _DAHDIT DIT_;{DIT void DAH write DIT 1,&DIT_,1 DAH;}
Suurin osa C-kielen syntaksista on käsitelty jo 581325-0 Ohjelmoinnin perusteet -kurssilla ja 581326-3 Java-ohjelmointi -kurssilla. Kyseisiä asioita ei tulla tällä kurssilla käymään läpi uudestaan. Voit kerrata ne esim. kurssikirjasta. Tällä kurssilla keskitytään niihin C-kielen piirteisiin, joita ei löydy Java-kielestä. Lisäksi kurssilla käsitellään dynaamista muistinkäyttöä, tietorakenteiden toteutusta ja kirjastojen laatimista C-kielellä. Seuraavassa on esitelty C-kielen tärkeimmät erot Java-kieleen:
- C-kielessä EI ole olioita.
- C-kielessä on muistiosoitepointtereita ja siis osoitearitmetiikkaa.
- C-kielessä taulukot eivät ole olioita ja indeksien rajoja ei tarkisteta.
- C-kielessä merkkijonot eivät ole olioita, vaan `\0` -merkkiin päättyviä muistialueita.
- C-kielessä ei ole automaattista muistinhallintaa.
- C-kielessä on etumerkittön kokonaislukutyyppi.
- C-kielessä ei ole boolean tyyppiä vaan int on boolean tyyppi.
- C-kielessä on varatut sanat struct, union, typedef.
- C-kielessä tyyppimuunnos (cast) tehdään automaattisesti vaikka tietoa voi kadota.
- C-kielessä funktiolla voi olla vaihtuva parametrilukumäärä.
- C-kielessä ei ole metodien kuormitusta.
- C-kielessä on #define, #include jne. -makroja.
2 Ensimmäinen C-ohjelma
Muodostamme C-ohjelman joka tulostaa päätteelle (stdout) tekstin Hyvin menee maailma!.
#include<stdio.h> int main(void) { printf("Hyvin menee maailma!\n"); return 0; }
Havaitsemme monta tuttua piirrettä Java-kielestä, mutta myös muutaman uuden piirteen. Ensinnäkin ohjelman alkuun kirjoitettu direktiivi #include<stdio.h> mahdollistaa tavallisimman syöttö- ja tulostuspakkauksen (stdio) käytön. Tämän direktiivin lisäksi ohjelma sisältää vain pääohjelman (main). Tulostaminen tapahtuu printf-funktiolla. Pääohjelman nimen tulee C-kielessä olla main. Nimen eteen kirjoitetaan funktion tyyppi (int) ja nimen perään sulkujen sisään argumenttien kuvaus. Tässä tapauksessa argumenttilistana on void, joka kertoo, että funktiolla ei ole argumentteja.
Jan Lindström (Jan.Lindstrom@cs.Helsinki.FI)