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.

132 POGLAVLJE 7. FUNKCIJEkoja ju je pozvala. Na taj se način svi upisani znakovi ispisuju u obrnutomredoslijedu.U ovom jednostavnom primjeru vidi se drugi nedostatak rekurzivnog programa.Pri svakom novom rekurzivnom pozivu funkcije kreiraju se ponovosve lokalne varijable. U gornjem primjeru koristili smo onoliko varijabli kolikoje bilo upisanih znakova, mada bi jedna bila sasvim dovoljna.7.6 Funkcije s varijabilnim brojem argumenataFunkcije scanf i printf primjeri su funkcija koje primaju varijabilanbroj argumenata. Datoteka zaglavlja sadrži neke definicije imakro naredbe (vidi sekciju 8) koje omogućavaju programeru pisanje valstitihfunkcija s varijabilnim brojem argumenata.U je definiran tip podatka va list koji predstavlja pokazivačna listu nedeklariranih argumenata. Stoga na početku funkcije trebadefinirati varijablu tipa va list. Na primjer:va_list pa;Varijabla pa se inicijalizira pomoću funkcije va start. Ona uzima kao prviargument varijablu pa, a kao drugi argument posljednji deklarirani argumentfunkcije. To znači da funkcija mora imati barem jedan deklarirani argument.Kao rezultat varijabla pa će pokazivati na prvi nedeklarirani argument funkcije.Kada se želi pročitati jedan nedeklarirani argument koristi se va arg.Pri tome moramo znati tip argumenta. va arg uzima kao prvi argumentpokazivač pa, a kao drugi tip argumenta te vraća vrijednost argumenta ipovećava pokazivač pa tako da pokazuje na sljedeći nedeklarirani argument.Na primjer, ako je argument na koji pa pokazuje tipa int i vali varijablatipa int, onda bismo imali poziv oblikavali=va_arg(pa,int);Nakon njega pa će pokazivati na sljedeći nedeklarirani argument funkcije.Nedeklarirani argumenti funkcije pri pozivu funkcije podvrgnuti su standardnojpromociji koja vrijedi za funkcije bez prototipa: manji integralnitipovi konvertiraju se u int, a float u double.Konačno, deklaracija funkcije s varijabilnim brojem argumenata ima oblik:tip ime_funkcije(tip_1 arg1, tip_2 arg_2,...);

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

Saved successfully!

Ooh no, something went wrong!