C/Funkcje: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
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>
 
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.
 
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ż:
Takie* funkcjeFunkcje wo językuzmiennej angielskimliczbie toargumentów (wariadyczne) ( ang. '''Variadic functions''')<ref>[https://en.cppreference.com/w/c/variadic Variadic functionsin cppreference]</ref>
* 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 ==