Uvod u programiranje u programskom jeziku C |
Preporučena literatura
Kernighan Brian W, Ritchie Dennis M
Programski jezik C,
Prentice Hall 1988.
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)
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
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.
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.
- 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.
- čitljivost
Bitno je da postoji visok stepen razumljivosti logike programa.
- jednostavnost
Koristiti najjednostavnije programske strukture, ali tako da se ne umanji efikasnost programa.
- efikasnost
Meri se vreme potrebno za izvršavanje programa i veličina potrebne memorije.
- 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.
- univerzalnost
Upotrebljavati što opštiju logiku programa (npr.snabdevanje programa
argumentima obezbediti iza datoteke (opšti ulaz), a ne unositi u program kao konstante,...)