Programowanie w C – Przekazywanie funkcji jako argument funkcji
Wprowadzenie.
We wpisie przedstawiłem, w jaki sposób przekazać funkcję jako argument innej funkcji. Taka funkcjonalność może przydać nam się, gdy na przykład chcemy przeprowadzić testy naszej funkcji lub chcemy „obudować” funkcję dodatkową funkcjonalnością.
Zakres artykułu.
- Przekazywanie funkcji jako argument funkcji
- Przekazanie funkcji z parametrami jako argument funkcji
Przekazywanie funkcji jako argument funkcji
W pierwszym kroku napiszmy prostą funkcję, która wypisze nam wyraz „Hello”.
Następnie należy stworzyć funkcję, która będzie posiadała parametr, do którego będziemy mogli przypisać jakąś funkcję.
Deklaracja takiej funkcji wygląda następująco.
W tym miejscu warto zwrócić uwagę, na to, że funkcje przekazuje się poprzez wskaźnik do funkcji. W naszym przypadku nasza funkcja jest typu void.
Aby nie komplikować tego przypadku w definicji funkcji „fun2” napiszmy jedynie wywołanie przekazanej funkcji.
Definicja funkcji będzie wyglądała następująco.
Jak możemy zauważyć, wywołanie przekazanej funkcji nie różni się od wywołania standardowej funkcji.
Stwórzmy teraz funkcję main(), w której wywołamy funkcję fun2() oraz przekażemy do niej jako argument funkcję fun1().
Cały kod programu wygląda następująco.
natomiast wynik, jaki otrzymamy w konsoli, będzie następujący.
Hello
Przekazanie funkcji z parametrami jako argument funkcji
Teraz przedstawię, w jaki sposób przekazać funkcję z parametrami jako argument funkcji.
Podobnie jak wcześniej stwórzmy funkcję, która będzie dodawała dwie liczny typu int.
Następnie stwórzmy funkcję, która będzie przyjmowała funkcję jako argument. Funkcja ta ma mieć za zadanie przetestowanie funkcji dodawanie. Dodatkowo nasza funkcja testująca niech informuje nas, czy test przeszedł, czy jest nie.
Funkcja taka będzie wyglądała następująco.
Cały kod programu wygląda następująco.
natomiast wynik, jaki otrzymamy w konsoli, będzie następujący.
wynik dodawania to: 7
PASS
FAIL
PASS
FAIL
Dzięki zastosowaniu wyżej przedstawionej konstrukcji możemy w szybki sposób, przetestować jakąś funkcję z wieloma parametrami wejściowymi.