Unix-opas, luku 5 Muita toimintoja ja sovelluksia Unix-koneissa:

Ohjelmointi

Seuraavassa on aivan perusasioita omien ohjelmien tekemisestä ja suorittamisesta; tarkempia ohjeita on oppaassa Ohjelmointi Unixissa. Tässä käsitellään varsinaisilla ohjelmointikielillä kirjoitettuja käännettäviä ohjelmia, ei esim. ns. shell-skriptejä tai Awk- tai Perl-ohjelmia. Yleisesti huomattakoon, että kokonaisen oman ohjelman tekemistä kannattaa yleensä harkita vasta, kun homma ei hoidu yksinkertaisemmalla tavalla. (Ks. kohtaa Työkaluajattelu.)

Yleinen menettely

Jos halutaan käyttää eli ajaa ohjelmaa, jonka käyttäjä on itse kirjoittanut esimerkiksi C-, Fortran- tai Pascal-kielellä, menetellään näin:

  1. kirjoitetaan ohjelma tiedostoon
  2. käännetään ohjelma asianomaisen ohjelmointikielen kääntäjällä
  3. jos kääntäjä ilmoittaa virheistä ohjelmassa, korjataan ohjelmatiedostoa editorilla ja käännetään uudestaan
  4. käynnistetään ohjelma, oletusarvoisesti komennolla ./a.out

Ohjelman kirjoittaminen tiedostoon

Ohjelma kirjoitetaan tiedostoon editorilla, tavallisimmin Emacsilla. Tälle tiedostolle, ohjelman lähdekieliselle tiedostolle eli lähdekoodille (source code), annetaan nimi, jonka loppuosa vastaa käytettyä kieltä. Loppuosan ja kielen vastaavuus on järjestelmä- ja kääntäjäkohtainen mutta voisi olla esimerkiksi seuraavanlainen:

ohjelmointikieli tiedoston nimen loppuosa
C .c
FORTRAN .f
Pascal .p

Ohjelman kääntäminen

Kirjoittamastasi ohjelmasta, ns. lähdekoodista (source), tehdään suorittamiskelpoinen ohjelmatiedosto eli binaaritiedosto kääntämällä. Ohjelma käännetään komennolla, joka valitaan käytetyn ohjelmointikielen mukaan seuraavasti.

Tyypillisiä kääntämiskomennon nimiä ovat cc C-ohjelmille, f77 tai f90 Fortran-ohjelmille ja pc Pascal-ohjelmille. Joissakin koneissa on tarjolla joillekin ohjelmointikielille useita vaihtoehtoisia kääntäjiä. Erityisesti mainittakoon Gnu-C, joka saattaa olla käytettävissä nimellä gcc ja jota monet pitävät parempana kuin laitevalmistajien tekemiä C-kääntäjiä.

Kääntämiskomennossa ilmoitetaan ohjelmatiedoston nimi, esimerkiksi

cc omaohj.c
Kääntämiskomennon antamisen jälkeen kone saattaa tulostaa joukon kääntäjän virheilmoituksia. Usein ne ovat helposti ymmärrettäviä, joskus hyvinkin mystisen tuntuisia. Kääntäjä voi antaa paitsi virheilmoituksia myös varoituksia ja informatiivisia ilmoituksia.

Virheiden selvittelyssä kyseisen ohjelmointikielen oppikirja on tarpeellinen. Virheet korjataan editorilla, minkä jälkeen ohjelma käännetään uudestaan. Jos virheilmoituksia on paljon, kannattaa usein etsiä ja korjata vain muutama virhe ohjelman alusta ja kääntää ohjelma sitten uudestaan, koska yksi virhe voi sotkea kääntäjän toimintaa niin, että se saattaa valittaa asiattomiakin.

Ohjelman käynnistäminen

Kun käännös on onnistunut virheittä, ohjelma käynnistetään komennolla

./a.out

Se, mitä sitten tapahtuu, riippuu siitä, mitä ohjelma tekee. Ohjelman suorituksen päätyttyä pitäisi päätteelle tulostua komentotulkin kehote.

Jos ohjelma lukee päätteeltä syöttötietoja, niin yleisesti ottaen ei tulostu mitään kehotetta tms., ellei itse ohjelmassa ole tulostuslausetta, joka sellaisen kirjoittaisi.

Virheiden selvittely

Joskus ohjelma saattaa "kaatua" ajonaikaiseen virheeseen, koska siinä on sellainen virhe, jota kääntäjä ei ole havainnut. "Kaatuminen" tarkoittaa, että odotetun tulostuksen asemesta saadaan jokin enemmän tai vähemmän hämärä virheilmoitus kuten Bus error - core dumped. Virheilmoitusteksti ei useinkaan kerro mitään muuta hyödyllistä kuin että ohjelmassa on jokin vika.

On myös hyvin mahdollista, että ohjelma ei "kaadu" mutta ei myöskään tee ihan sitä, mitä oli tarkoitus - tällöin ohjelmassa on looginen virhe. Virheen voi yrittää paikallistaa esim. lisäämällä ohjelmaan välitulostuksia. Voit myös opetella käyttämään ns. debuggeria; erään debuggerin (dbx) suppeat käyttöohjeet ovat oppaassa Ohjelmointi Unixissa. Korjaamisen jälkeen ohjelma käännetään uudestaan ja kirjoitetaan taas ./a.out (ja pidetään peukkuja).

Entä jos itse ei mitenkään saa selvää kääntäjän virheilmoituksesta tai muuten törmää ylitsepääsemättömiltä tuntuviin ongelmiin oman ohjelmansa kanssa? Vrt. lukuun Mistä apua?. Ota huomioon, että hyväkään yleinen ATK-neuvoja ei ehkä osaa auttaa ohjelmointiin liittyvissä ongelmissa, ainakaan kaikkia ohjelmointikieliä koskevissa. Nyyseissä sopiva ryhmä ohjelmointiaiheisille ongelmille on yleensä sfnet.atk.ohjelmointi.alkeet.