C/Funkcje: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m →Zmienna liczba argumentów: wariadic |
|||
Linia 173:
int scanf(const char *format, ...);
Jak widzisz w deklaracji zostały użyte trzy kropki. Otóż język C ma możliwość przekazywania teoretycznie nieograniczonej liczby argumentów do funkcji (jedynym ograniczeniem jest rozmiar [[w:Stos (informatyka)|stosu]] programu). Cała zabawa polega na tym, aby umieć dostać się do odpowiedniego argumentu oraz poznać jego typ (używając funkcji <tt>printf</tt>, mogliśmy wpisać jako argument dowolny typ danych). Do tego celu możemy użyć wszystkich ciekawostek, zawartych w pliku nagłówkowym stdarg.h.
Takie funkcje w języku angielskim to '''Variadic functions'''<ref>[https://en.cppreference.com/w/c/variadic Variadic functionsin cppreference]</ref>▼
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:
Linia 222 ⟶ 219:
Przyjmuje ona jako argument ciąg znaków, w których niektóre instruują funkcję, by pobrała argument i go wypisała. Nie przejmuj się jeżeli nie rozumiesz wyrażeń <tt>*format</tt> i <tt>++format</tt>. Istotne jest to, że pętla sprawdza po kolei wszystkie znaki formatu.
Zobacz również:
▲
* makra ( ang. function macro) zdefiniowane w <stdarg.h><ref>[https://en.cppreference.com/w/c/variadic variadic w cppreference]</ref>
** va_start - umożliwia dostęp do zmiennych argumentów funkcji
** va_arg - dostęp do następnego argumentu funkcji wariadycznej
** va_copy - makes a copy of the variadic function arguments (C99)
** va_end - ends traversal of the variadic function arguments
* typ : va_list - holds the information needed by va_start, va_arg, va_end, and va_copy
== Wywoływanie funkcji ==
|