12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

7.4. INLINE FUNKCIJE 129ne bi bio uspješno preveden. Naime, funkcija f je uvedena u glavnom programubez eksplicitne deklaracije pa prevodilac pretpostavlja da se radi ofunkciji tipa int (tj. o funkciji koja vraća vrijednost tipa int). Stoga definicijudouble f(double x) prevodilac shvaća kao redefiniranje simbola f, štonije dozvoljeno.Prijenos argumenata funkciji u C-u vrši se po vrijednosti. To znači da sestvarni argumenti kopiraju u formalne argumente te funkcija stvarne argumentene može dohvatiti. Ukoliko se želi da funkcija mijenja stvarne argumente,onda ona mora dobiti njihove adrese (vidi sekciju 11.2).Ako je polje argument funkcije, onda se ono ne prenosi funkciji “po vrijednosti”,već funkcija dobiva pokazivač na prvi element polja pomoću kojegmože dohvatiti svaki element polja putem indeksa polja. Razlog za ovakavnačin prijenosa polja je u tome što se dimenzija polja ne zna unaprijed, a kopiranjesvih elemenata velikih polja bilo bi vrlo neefikasno (vidi sekciju 10.5).Ukoliko funkcija ima argument tipa polja koje se u njoj ne mijenja, onda gatreba deklarirati s modifikatorom const (sekcija 11.5).7.4 Inline funkcijeSvaki poziv funkcije predstavlja odreden utrošak procesorskog vremena. Procesortreba zaustaviti izvršavanje glavnog programa, spremiti sve podatke nužne za njegov nastavaknakon izlaska iz funkcije, predati funkciji argumente i početi izvršavati kôd funkcije.Kod malih funkcija, kao što je to na primjerdouble f(double x) {return x*x;}sam poziv funkcije može uzeti više procesorskog vremena nego izvršavanje kôda funkcije itime značajno usporiti program ako se funkcija često poziva.Da bi se to izbjeglo C99 dozvoljava da se funkcija deklarira inline:inline double f(double x) {return x*x;}Ključna riječ inline je sugestija prevodiocu da ekspandira tijelo funkcije na mjestu nakojem se ona poziva, izbjegavajući tako poziv funkcije. Prevodilac nije dužan ispuniti tajzahtijev na svakom mjestu.Osnovno ograničenje kod upotrebe inline funkcije je što njena definicija (a ne samodeklaracija) mora biti vidljiva na mjestu poziva funkcije. To ne predstavlja problem kodstatičih funkcija, no ako je funkcija definirana u nekoj drugoj datoteci, taj će uvjet bitinarušen. Tada se postupa tako da se definicija funkcije stavi u datoteku zaglavlja koja sepotom uključi u svaku .c datoteku koja funkciju koristi.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!