Programski jezik C

Uvod v C

V tem poglavju bomo spoznali osnove jezika C.

Čeprav v 21. stoletju narašča količina programske kode spisane v drugih programskih jezikih kot so Go, Java, Javascript, Python in Ruby, ima programski jezik C naslednje prednosti.

Zaradi teh lastnosti je jezik C dobra izbira tako za pisanje kratkih in hitrih programov, kot tudi dobrih in obsežnih operacijskih sistemov. Primer takšnega operacijskega sistema je Linux z izvorno kodo dostopno na naslovu kernel.org, ki tvori jedro sistema Android, ki ga najdemo na 88 % vseh mobilnih napravah. V programskem jeziku C je spisana tudi vsa koda za Mars Rover. Uporabnost jezika C je pravzaprav neomejena.

Programski jezik C++ ni nadgradnja jezika C, kajti programski jezik C++ ne podpira vsega, kar podpira jezik C.

V vseh poglavjih se bo uporabljal prevajalnik za C iz Gnu Compiler Collection (gcc), saj je brezplačen in, za svojo ceno, precej dober. Za Windows sisteme se priporoča gcc, ki pride v paketu programske opreme mingw. Za programersko okolje (imenovano tudi IDE) se lahko uporabi tudi Codelite, vendar je mogoče prav vse narediti s poljubnim urejevalnikom besedila in ukazno vrstico.

Trenutno obstajajo tri ISO standardi jezika C: C90 iz leta 1990, C99 iz leta 1999 in C11 iz leta 2011, ki se razlikujejo v podprtih zmogljivostih; obstajata pa tudi t.i. K&R C in t.i. ANSI C, ki je ameriška standardizacija in je enaka ISO C90.

Velika slika

Od daleč je programiranje v C razdeljeno v tri korake: izvorna koda, postopek prevajanja in izvrševanje. Izvorna koda vsebuje človeku prijazne stavke, ki jih prevajalnik prevede stroju razumljivo kodo, ki jo ta zna izvršiti.

Izvorna koda

Ko pričnemo s pisanjem kode v novem programskem jeziku, se postavi vprašanje, kje in kako sploh začeti. Jezik C ima to prelepo lastnost, da je vsa koda zbrana znotraj funkcij in da se program začne izvajati znotraj funkcije, ki se imenuje main (obvezno z malimi črkami) in je nujna, če želimo na koncu imeti izvršljivi program.

V vsakem programu je natanko ena main funkcija. Programske knjižnice je ne vsebujejo, saj je ne smejo.

Koda je sestavljena iz stavkov. Več stavkov lahko združimo v skupek stavkov, poimenovan blok (stavkov), ki se od preostalih stavkov loči z zavitimi oklepaji.

Za začetek si oglejmo preprosti primer programske kode, sestavljene iz nekaj stavkov, ki poskrbijo, da se koda med notranjima zavitima oklepajema, kar predstavlja prazen blok, ponavlja v neskončnost.

int main (void)
{

  while (1) {
    /* tu se program ponavlja */
  }

  return 0;
}

Opazimo, da sta besedi while in return zapisani z malimi črkami. Da, vse besede (kot del stavkov jezika C) so zapisane z malimi črkami. Vsi stavki, razen tistih, ki se začno z # in so zato namenjeni prevajalniku, in tistih, ki se lahko odprejo z {, se končajo s podpičjem ;.

Čeprav takšen način omogoča zapis več stavkov v eno vrstico, vendar se takšen način zaradi manjše preglednosti nad kodo odsvetuje.

Prazne vrstice prispevajo k berljivosti in navidezno ločijo dele z različnimi nalogami.

Komentarji

V programskem jeziku C lahko v datoteko s kodo poleg same kode vnesemo tudi komentarje, ki nam pomagajo pri razumevanju kode oziroma poteka delovanja. Kot je prikazano v zgornjem primeru se komentar začne (loči) z znakoma /* in konča z */. S standardom C99 programskega jezika C se je podprl tudi drugi, krajši način komentiranja, ki se prične z // in konča s prehodom v novo vrstico.

Komentarji se lahko nahajajo kjerkoli v programu; tudi tako return /* brez napak */ 0;.

Tako kot se je potrebno naučiti programiranja, se je potrebno naučiti tudi komentiranja kode, saj moramo ugotoviti, kdaj je komentar potreben in kdaj je komentar odveč.

Komentarji ne podpirajo gnezdenja. Če komentar dvakrat začnemo /* ... /*, ga ni potrebno dvakrat končati (zaključiti).

#include

Ker si ne želimo vse kode pisati od začetka oziroma bi radi neko kodo uporabili na več mestih, si lahko pomagamo z ukazom #include, ki v našo kodo na mesto stavka vključijo drugo kodo. Takšen način je prikladen za vključitev sistemskih knjižnic, ki nam izpisujejo na zaslon, berejo datoteke, razrešujejo domene in podobno.

#include <stdio.h>

Če ime datoteke zapišemo v lomljene oklepaje: <, >, se datoteka nahaja v sistemsko določeni mapi. Če bi se datoteka nahajala v isti mapi kot naša koda (ali v bližnjih mapah), bi namesto lomljenih oklepajev uporabili dvojne narekovaje: ", kot kaže naslednji primer.

#include "algoritmi.h"

Prvi program

Sedaj lahko napišemo prvi program, ki uporabi funkcijo printf iz standardne knjižnicestdio.h.

1. izvorna koda

Izvorno kodo naslednjega programa shranimo v datoteko hej.c.

Uporaba končnice .c za označevanje datotek z izvorno kodo jezika C ni zapovedana, je pa priporočena.

#include <stdio.h>

int main(void)
{

  printf("Hej hej!\n");

  return 0;
}

2. prevajanje

Preden program lahko izvršimo, ga moramo prevesti v strojni jezik s tako imenovanim prevajalnikom (compiller). Naslednji ukaz se izvrši v konzoli z nameščenim prevajalnikom gcc in bo javil, če smo v kodi naredili kakšno napako, in nas opozoril, če je v kodi kaj čudnega.

$ gcc -o hej hej.c

S stikalom -o smo prevajalniku naročili, naj preveden program shrani v datoteko hej, ki jo sedaj lahko zaženemo.

3. izvrševanje

Dobljen program hej poženemo tako kot vse ostale.

$ ./hej
Hej hej!