File: Stare vježbe/vjezbe13/84__ellipsis.c
/* 84__ellipsis.c ----- Program demonstrira upotrebu ... (ellipsis) notacije za implementaciju funkcija koje primaju proizvoljan broj argumenata (poput primjerice funkcija printf i scanf). */ #include <stdio.h> #include <stdarg.h> char *poruke[4]={ "", "Datoteka %s ne postoji u direktoriju %s!", "%d: nedozvoljena vrijednost!", "Datoteka %s: linija %d -> %s: nedozvoljeni simbol!" }; /* Napomena: U deklaraciji funkcije mora postojati barem 1 imenovani argument. ... se moze nalaziti samo na kraju */ void ispis(int n, ...) { int i; char *p, *s; va_list argp; /* kao drugi argument funkcije va_start navodi se neposredni prethodnik liste varijabilnih argumenata */ va_start(argp, n); for(p=poruke[n]; *p; p++) { if (*p!='%') { putchar(*p); continue; } switch(*++p) { case 'd': /* va_arg vraca trenutni argument i inkrementira argp na iduceg */ i=va_arg(argp, int); break; case 's': /* va_arg vraca trenutni argument i inkrementira argp na iduceg */ s=va_arg(argp, char*); break; default: putchar(*p); } } /* na kraju resetiramo argp */ va_end(argp); } int main() { ispis(1, "source.c", "/windows"); ispis(2, 314); ispis(3, "datoteka.c", 13, "medvjedici"); return 0; }
|