Uvod u programiranje u programskom jeziku C

Naslovna strana srpskog izdanjal

Preporučena literatura

Kernighan Brian W, Ritchie Dennis M   Programski jezik C, Prentice Hall 1988.

Uvodne napomene o jeziku

Pre pojave programskog jezika C je korišćen asemblerski jezik za potrebe izrade operativnih sistema. U to vreme je samo asembler bio efikasan za sistemske programe. Kako C je programski jezik višeg nivoa (asembler je nivo iznad mašinskog jezika), to su sistemske programi pisani u C-u imali mogućnost lakšeg održavanja u odnosu na asembler.

Jezik C poseduje relativno velik broj operatora i relativno mali broj ključnih reči.
ključne reči jezika C
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

 

Pažnja:
Jezik C je case-sensitive (osetljiv na veličinu slova).
Ključne reči jezika i ugrađene C funkcije pišu se malim slovima.

Sa tog stanovišta su identifikatorima
Index
index
identifikuju dve različite promenljive.

main( )

Izvršavanje C programa počinje od funkcije main( ) .
main( )   je funkcija (ne naredba) i neophodne su zagrade iza njenog naziva.
Funkcija main( ) obično sadrži blok naredbi koji počinje posle otvorene vitičaste zagrade { i nastavlja se do zatvorene vitičaste zagrade }

Potreba za tačka- zarezom

Mnoge linije C kôda se završavaju znakom tačka-zarez (;), ali ne i sve linije. Na primer, nije potrebno stavljati tačku-zarez (;) iza nepotpunih linija kôda.

Takve su, na primer, linije koje se završavju vitičastim zagradama ( vitičasta zagrade = simboli za grupisanje kôda između početka i kraja)


Razvojni put jednog programa

razvojni put jednog programa

Editovanje

cat > zdravo.c
#include < stdio.h >
int main( )
{
printf("Zdravo, svete\n");
return 0;
}
CTRL-C|D

Pregled fajlova u editoru (radi ispravki, dodataka,...)

joe zdravo.c

emacs

Kompajliranje

gcc zdravo.c
./a.out
gcc zdravo.c
a.out
gcc -o pokreniMe zdravo.c
./pokreniMe
gcc -o pokrenime zdravo.c
pokrenime

 

Ako u direktorijumu postoji izvršni fajl, npr. a.out i ako u shell-u otkucamo:
$ ls a.out
a.out
$ a.out
a.out: not found
onda nastupaju situacije koje su gore istaknute.
Razlog: ako u komandi za pokretanje programa nedostaje znak /, onda shell pretražuje redom listu direktorijuma u PATH promenljivoj ( čiji sadržaj se može videti komandom echo $PATH)
Dalje pokušava da izvrši komandu <dir>/a.out, gde je <dir> jedan od direktorijuma iz PATH promenljive.
Tako da, ako tekuči direktorijum nije u PATH promenljivoj (obično i nije), onda komanda neće biti pronađena.
Zato, kada se program pozove sa ./a.out, to znači da je jasno naznačena putanja do fajla, i shell će ga pronaći.

Promena ovakvog ponašanja shell-a
Dodati pokazivač na tekući direktorijum na kraj PATH liste:
setenv PATH $PATH:. (C shell)
export PATH=$PATH:. (Bourne shell)

Postavljenjem ove linije u ~/.profile omogućuje se izvršavanje fajlova iz tekućeg direktorijuma navođenjem samo imena.


C prevodioci (kompajleri)

Gore smo se upoznali sa GNU verzijom C prevodioca, tj. sa gcc prevodiocem.

Ako se C program nalazi u jednoj datoteci (npr. zdravo.c), prevodilac se poziva sa:
gcc zdravo.c

Efekat je da će gcc prevesti izvorni program i, ako nema sintaksnih grešaka, kreiraće se izvršni fajl.

Ako, ipak, postoji greška (e) koji je prevodilac detektovao, onda će se ispisati poruka o grešci uz referencu na linije u kojima u izvornoj datoteci postoji greška.


Neke od mnogobrojnih opcija gcc prevodioca

-o
opcija za zadavanje imena završnog programa

Npr. gcc -o zdravo hello.c
Rezultat je izvrsivi program koji se ne zove a.out, vec se pokrece sa zdravo
-x
ukoliko ekstenzija datoteke ne odgovara nekoj od podrazumevanih ekstenzija za pokretanje adekvatnog prevodioca određenog jezika, onda se prevodilac koji će biti pokrenut određuje -x opcijom koja ima kao argument identifikator jezika za koji će biti pozvan prevodilac
Npr. ako je izvorna datoteka sa C programom smeštena u datoteci zdravo.sem, onda bi naredba za njegovo prevođenje i davanje imena zdravo.exe izvršnom fajlu glasila:
gcc -x c -o zdravo.exe zdravo.sem

Ostale opcije gcc prevodioca

Tekst i objasnjenja koja slede ne mogu po svojoj preciznosti i detaljnosti da budu zamena za man i info stranice. Stoga se studentima preporucuje da (ako postoji potreba) pogledaju i njih.
-v
informacija o verziji gcc-a koja se koristi
Korisno je saznati koju verziju gcc-a koristite. U situaciji da se jave problemi i poruke o gresci pri prevodjenju neke aplikacije, onda obratite paznju koju verziju gcc-a zahteva aplikacija koju prevodite.
-ansi
iskljucuju se nestandardna prosirenja GNU C prevodioca
U prosirenja se, na primer, ubraja typeof operator, complex tip. Mada su neka od prosirenja postala deo tzv. C 99 standarda jezika.
-c
prevodjenje izvornog kôda, bez povezivanja
Uspesno prevedeni fajlovi ce dobiti ekstenziju .o
Korisna opcija za situacije prilikom pisanja nove biblioteke, odnosno testiranja aplikacije koja koristi jos uvek nepouzdanu novu boblioteku.
Poruke upozorenja
-w
ukidanje poruka upozorenja
-W
izdavanje upozorenja
No, pojava poruka upozorenja ne mora da znaci i nemogucnost prevoda izvornog kôda, vec da kôd nije perfektan. Na primer: definisana promenljiva se nigde ne koristi,...
-Wall
ovom grupnom opcijom se izdaje veci broj upozorenja.
Mada, ni ovom opcijom, nisu obuhvacene bas sve konstrukcije o kojima se vodi racuna.
Postoje i specijalne opcije za razlicite konstrukcije. Na primer: -Wswitch, -Wunused, -Wfloat-equal
Linker opcije (opcije koje se odnose na fazu povezivanja)
-l
uz ovu opciju se navodi i naziv biblioteke sa kojom se mora linkovati program
Na primer: gcc -o pokrenime -lm sinus.o glavni.o
Naime, gcc ne linkuje automatski sa celom standardnom bibliotekom, vec su neke rutine iz standardne biblioteke (u konkretnom primeru matematicke rutine) izdvojene u posebnu biblioteku. U slucaju matematickih rutina, to je biblioteka libm, pa se izostavljanjem prefiksa lib iz njenog naziva, zapravo, opciji -l dodaje sufiks m iz naziva.

Kriterijum ocene kvaliteta programa

  1. integritet

    Najvažniji kriterijum je korektnost rada pri obradi na računaru.
    Ostali kriterijumi najčešće i nisu od koristi, ako nije ispunjen ovaj kriterijum.

     

  2. čitljivost

    Bitno je da postoji visok stepen razumljivosti logike programa.

     

  3. jednostavnost

    Koristiti najjednostavnije programske strukture, ali tako da se ne umanji efikasnost programa.

     

  4. efikasnost

    Meri se vreme potrebno za izvršavanje programa i veličina potrebne memorije.

     

  5. modularnost

    Misli se na tehniku izrade programa pri kojoj se veći programi dele u više odvojenih programskih modula koji komuniciraju među sobom. Time se povećava čitljivost i jednostavnost i olakšavaju buduće modifikacije.

     

  6. univerzalnost

    Upotrebljavati što opštiju logiku programa (npr.snabdevanje programa argumentima obezbediti iza datoteke (opšti ulaz), a ne unositi u program kao konstante,...)


Naslovna Programiranje 1