C-ohjelmoinnin perusteet
C-ohjelmoinnin aloittaminen

C-ohjelmointikieli kehitettiin 1970-luvulla, ja se on edelleen yksi laajimmin käytetyistä ohjelmointikielistä. Myöhemmin C-kielestä kehitettiin laajennettu ohjelmointikieli C++, johon lisättiin muun muassa olio-ohjelmoinnin ominaisuuksia.

C-kielisiä ohjelmia voidaan kehittää eri käyttöjärjestelmissä, kuten Windowsissa, Linuxissa ja macOS:ssä. Näissä ympäristöissä käytetään yleensä kyseiselle käyttöjärjestelmälle sopivia C-kääntäjiä, jotka muuntavat ohjelmakoodin tietokoneen suoritettavaksi konekieleksi.

Lähdekoodista sovellukseksi

C-kieliselle lähdekooditiedostolle käytetään yleensä tarkenninta .c (.cpp on yleensä C++-koodia sisältävä tiedosto). Header-tiedostojen tarkennin on .h ja niissä on kuvattu ohjelmassa käytettävien funktioiden rakenne. Funktioiden varsinainen koodi on kuitenkin .c-tiedostoissa.

Windowsissa suoritettavien sovellusten tarkennin on .exe. Jos ohjelman nimeksi annetaan myApp, kääntämisen ja linkityksen tuloksena syntyvän suoritettavan tiedoston nimi on Windowsissa myApp.exe. Linuxissa ja macOS:ssä suoritettava tiedosto on yleensä ilman päätettä eli se olisi myApp.

Yksinkertaistetusti kääntäjä käsittelee jokaisen lähdekooditiedoston erikseen ja muodostaa siitä objektitiedoston. Linkkeri yhdistää objektitiedostot ja tarvittavat kirjastot lopulliseksi suoritettavaksi ohjelmaksi. C-sovelluksen luomisen vaiheet voidaan kuvata näin:

  1. Ns. esikääntäjä lukee .c-tiedostoa, etsii sen alussa olevia #include-rivejä ja korvaa ne kyseisten otsikkotiedostojen (.h) sisällöllä.
  2. C-kääntäjä ottaa esikäsitellyn lähdekoodin ja kääntää sen konekielelle, luoden objektitiedoston (.o tai .obj).
  3. Linkkeri (linker) yhdistää mahdolliset useat objektitiedostot sekä kirjastot, ja tuottaa lopullisen suoritettavan tiedoston, esim. .exe Windowsissa.
Ensimmäinen C-ohjelma

Tarkastellaan, miten Hello World -ohjelma kirjoitetaan C-kielellä:

#include <stdio.h>

int main(){
    printf("Hello World!");
    return 0;
}

Ohjelman rakenne voidaan selittää seuraavasti:

  • Ensimmäinen rivi #include <stdio.h> on esikääntäjän direktiivi, joka kertoo, että tiedosto stdio.h tarvitaan mukaan käännökseen.
  • Rivi int main() { kertoo, että tästä alkaa main-niminen funktio, joka päättyy loppusulkuun }. Sana int kertoo, että main-funktio palauttaa kokonaisluvun.
  • Rivillä printf("Hello World!"); kutsutaan funktiota printf ja sille annetaan argumenttina merkkijono "Hello World!".
  • Rivillä return 0; palautetaan arvo nolla.

Esimerkistä huomataan lisäksi, että C-kielessä lauseet päätetään yleensä puolipisteeseen.

C-kielen rakenteisiin, kuten muuttujiin ja funktioihin, tutustutaan tarkemmin sivulla C-kielen perusteet.

Otsikkotiedostot ja kirjastot

Ensimmäisen C-ohjelman rivi #include <stdio.h> käskee esikäsittelijää ottamaan mukaan stdio.h-otsikkotiedoston sisällön. Otsikkotiedosto sisältää muun muassa printf-funktion esittelyn, jonka perusteella kääntäjä tietää, miten funktiota käytetään.

Funktion varsinainen toteutus on C:n standardikirjastossa. Kirjasto on valmiiksi tehtyä ohjelmakoodia, jota oma ohjelma voi käyttää. Ohjelmoija voi käyttää valmiita, toisten tekemiä kirjastoja, mutta hän voi myös tehdä kirjastoja itse. C-ohjelmissa käytetään kirjastoja esimerkiksi tulostamiseen, tiedostojen käsittelyyn ja matemaattisiin laskuihin.

Kirjasto ei yleensä ole itsenäinen ohjelma, vaan se liitetään osaksi omaa ohjelmaa käännöksen tai ohjelman käynnistyksen yhteydessä. Tässä vaiheessa riittää ymmärtää, että otsikkotiedosto kertoo kääntäjälle kirjaston tarjoamista toiminnoista ja kirjasto sisältää niiden varsinaisen toteutuksen.

  • Staattinen kirjasto liitetään yleensä osaksi valmista ohjelmatiedostoa käännöksen yhteydessä. Sen tiedostopäätteitä ovat esimerkiksi .a ja .lib.
  • Dynaaminen kirjasto pidetään erillisenä tiedostona, jota ohjelma käyttää ajon aikana. Sen tiedostopäätteitä ovat esimerkiksi .dll Windowsissa ja .so Linuxissa.
C-ohjelmointiin liittyviä tiedostopäätteitä

Alla olevassa taulukossa on C-ohjelmointiin liittyvien tiedostojen tavallisia päätteitä.

Tiedostopääte Tiedostotyyppi
.a static library file
.c C language file
.cpp C++ language file
.dll Dynamic Linked Library file (Windows)
.exe Executable file (Windows)
.h C Header file
.lib Static library or import library file (Windows)
.o Object file (Unix/Linux)
.obj Object file (Windows)
.so Dynamic shared library file (Linux/Unix)



Toggle Menu