| 
 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; }   
 
          
  
       |