C vaatii ohjelmoijalta tarkkuutta (Ohjelmointikielet kautta aikojen 8)

Tämä julkaisu on kahdeksas osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Miltä tietokoneen suorittama koodi oikeasti näyttää?

Oheisessa kuvassa on vasemmalla C-kielellä kirjoitettu ohjelma ja oikealla sitä vastaava konekielinen koodinpätkä, tässä tapauksessa Linux-käyttöjärjestelmän C-kääntäjän tuottamana. Esimerkiksi Linuxin objdump-työkalulla saa kääntäjän tuottamasta binäärikoodista heksadesimaaleiksi tulkitun esityksen. Kukin heksadesimaalimerkki vastaa neljää binäärilukua. 2^4 = 16, eli yhdellä merkillä on 16 mahdollista arvoa, mistä nimi heksadesimaali. Kukin kahden merkin pari vastaa siis kahdeksaa binäärilukua eli yhtä tavua, joka on tietokoneissa yleensä käytetty yhden muistipaikan koko.

 

Kuvassa oikealla ensimmäisessä sarakkeessa on konekielisen komennon osoite, esimerkiksi 1155. Myös osoitteet esitetään heksadesimaalimuodossa. Kukin kahden merkin mittainen komennon osa vie yhden muistipaikan, joten tämän seitsemän merkkiparin mittaisen komennon jälkeen seuraavan komennon osoite on 115c. Osoitteen jälkeen toisessa sarakkeessa on itse komento kahden heksadesimaalimerkin pareina.

 

Kolmannessa sarakkeessa on sama komento ihmisen luettavassa muodossa. Luettavuus on suhteellista: esimerkiksi “movl” tarkoittaa “move long”, eli siirrä tai tallenna pitkä kokonaisluku. Neljännestä sarakkeesta löytyvät komennon parametrit, eli tässä tapauksessa tallennettava kokonaisluku ja tallennusosoite. Tämä konekielinen komento, joka alkaa muistipaikasta 1155, vastaa siis C-ohjelman riviä

int x = 0;

 

1970-luvulla alkunsa saanut C on esimerkki matalan tason ohjelmointikielestä, jonka avulla pääsee melko suoraan käsittelemään tietokoneen sisäisiä rakenteita. Suuri osa ohjelmakoodista onkin suoraviivaisesti yhdistettävissä konekielisiin komentoihin, kuten kuvan koodiesimerkissä.

C:n opiskelu on monelle ohjelmoijalle silmiä avaava kokemus, kun esimerkiksi tietokoneen muistin rajallisuus täytyy ottaa ohjelmoidessa huomioon. Osaavan ohjelmoijan käsissä C on yksi resurssitehokkaimmista ohjelmointikielistä, ja esimerkiksi käyttöjärjestelmien koodissa on usein paljon C:tä. C on edelleen yksi maailman käytetyimmistä ohjelmointikielistä.

C:n tarkkuus, yksityiskohtaisuus ja rajoitteet eivät kuitenkaan sovi kaikkiin tarkoituksiin, joten sen pohjalta on kehitetty useita muita kieliä, kuten C++ ja C#. Näissä kielissä yhdistyy C:stä perityt tehokkaat ominaisuudet, kuten matalan tason muistin käsittely, korkeamman tason rakenteisiin, kuten olio-ohjelmointiin. C++ on laajalti käytössä mm. peliohjelmoinnissa ja kilpaohjelmoinnissa. Myös Arduino-mikrokontrollereita ohjelmoidaan yleensä C:llä tai C++:lla.

Vaikka C on jo 50 vuotta vanha ohjelmointikieli, sitä kehitetään jatkuvasti. Todennäköisesti tänä tai ensi vuonna päästään päättämään C:n seuraavasta standardoidusta versiosta – edellinen versio on vuodelta 2017. C onkin tämän julkaisusarjan ensimmäinen kieli, jota myös edelleen laajasti opiskellaan, ja josta on tarjolla paljon eri tasoisille suunnattuja oppimateriaaleja. Alla listattuna joitakin niistä.

Ohjelmointiputkan C-oppimateriaali: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=cohj_1
Tie koodariksi -sivuston C++ -kurssi ohjelmoinnin perusteet osaavalle https://tie.koodariksi.fi/cpp/
FiTech-verkostoyliopiston kautta on usein tarjolla avoimia C-ohjelmoinnin yliopistokursseja: https://fitech.io/

 

Leave a Reply

Your email address will not be published. Required fields are marked *