Kurs programowania w C cz. 69

Nasza ocena:

5
Pobrań: 7
Wyświetleń: 756
Komentarze: 0
Notatek.pl

Pobierz ten dokument za darmo

Podgląd dokumentu
Kurs programowania w C  cz. 69 - strona 1

Fragment notatki:

84 ROZDZIAŁ 11. FUNKCJE jest rozmiar  stosu  programu). Cała zabawa polega na tym, aby umieć dostać się do odpowiedniego argumentu oraz poznać jego typ (używając funkcji printf, mogliśmy wpisać jako argument dowolny typ danych). Do tego celu możemy użyć wszystkich ciekawostek, zawartych w pliku nagłówkowym stdarg.h. Załóżmy, że chcemy napisać prostą funkcję, która dajmy na to, mnoży wszystkie swoje argumenty (zakładamy, że argumenty są typu int). Przyjmujemy przy tym, że ostatni argument będzie 0. Będzie ona wyglądała tak: #include  int mnoz (int pierwszy, ...) { va_list arg; int iloczyn = 1, t; va_start (arg, pierwszy); for (t = pierwszy; t; t = va_arg(arg, int)) { iloczyn *= t; } va_end (arg); return iloczyn; } va list oznacza specjalny typ danych, w którym przechowywane będą argumen- ty, przekazane do funkcji. Makropolecenie va arg odczytuje kolejne argumenty i prze- kształca je do odpowiedniego typu danych. Na zakończenie używane jest makro va end — jest ono obowiązkowe! Oczywiście, tak samo jak w przypadku funkcji printf() czy scanf(), argumenty nie muszą być takich samych typów. Rozważmy dla przykładu funkcję, podobną do printf(), ale znacznie uproszczoną: #include  void wypisz(const char *format, ...) { va_list arg; va_start (arg, format); for (; *format; ++format) { switch (*format) { case ’i’: printf("%d" , va_arg(arg, int)); break; case ’I’: printf("%u" , va_arg(arg, unsigned)); break; case ’l’: printf("%ld", va_arg(arg, int)); break; case ’L’: printf("%lu", va_arg(arg, unsigned long)); break; case ’f’: printf("%f" , va_arg(arg, double)); break; case ’x’: printf("%x" , va_arg(arg, unsigned)); break; case ’X’: printf("%X" , va_arg(arg, unsigned)); break; case ’s’: printf("%s" , va_arg(arg, const char *)); break; default : putc(*format); } } va_end (arg); } ... zobacz całą notatkę



Komentarze użytkowników (0)

Zaloguj się, aby dodać komentarz