12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

9.3. VANJSKI SIMBOLI 153s objektnim kodom u izvršni program. Zadatak je linkera da pronade onesimbole (imena funkcija i globalnih varijabli) koji se u pojedinoj objektnojdatoteci koriste, ali nisu u njoj definirani. Svaki takav simbol mora imatijednu i samo jednu definiciju u nekoj od datoteka, s kojom linker onda povezujesimbol.Na primjer, funkcija može biti definirana u jednoj datoteci, a pozivati seu više drugih. U svakoj takvoj datoteci navodi se samo prototip funkcije.Linker će povezati simbol naveden u prototipu s definicijom funkcije. Pritome svi prototipovi (deklaracije) moraju odgovarati definiciji, i definicijatreba biti samo jedna. Analogno je s vanjskim varijablama.Osnovno je pravilo da su imena svih vanjskih varijabli i funkcija dostupnalinkeru; sva su ta imena vanjski simboli. C nam dozvoljava da neka imenane eksportiramo linkeru, kako bi se smanjio broj vanjskih simbola (vidi sekciju9.3.3). To se čini pomoću ključne riječi static.9.3.1 FunkcijeVidjeli smo već da funkcije uvijek imaju doseg datoteke, tj. funkcija definiranau datoteci može se pozvati bilo gdje u toj datoteci ako je na mjestupoziva vidljiva njena deklaracija. Štoviše, ime funkcije je automatski vidljivolinkeru, što znači da se funkcija može pozivati i u drugim datotekama.Na primjer, pretpostavimo da u prvoj datoteci imamo kôd:#include /****** Datoteka 1 ******/int g(int);void f(int i) {printf("i=%d\n",g(i));}int g(int i) {return 2*i-1;}i da se funkcija main(), koja poziva funkciju f(), nalazi u drugoj datoteci.Tada je u toj datoteci funkciju f() potrebno deklarirati, odnosno navestinjen prototip:extern void f(int); /****** Datoteka 2 *******/int main(void) {f(3);}

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

Saved successfully!

Ooh no, something went wrong!