Funkcje w programowaniu C z przykładami: rekursywne i inline
⚡ Inteligentne podsumowanie
Funkcje w programowaniu w C to wielokrotnego użytku bloki kodu, które dzielą duży program na mniejsze podprogramy, ułatwiając jego zrozumienie, testowanie i modyfikację. Każda funkcja składa się z deklaracji, definicji i części wywołującej.

Co to jest funkcja w C?
Funkcja w programowaniu C To wielokrotnego użytku blok kodu, który ułatwia zrozumienie i testowanie programu oraz umożliwia jego łatwą modyfikację bez konieczności zmiany programu wywołującego. Funkcje dzielą kod i modularyzują program, zapewniając lepsze i efektywniejsze rezultaty. Krótko mówiąc, większy program jest dzielony na różne podprogramy, które nazywane są funkcjami.
Kiedy dzielisz duży program na różne funkcje, zarządzanie każdą funkcją z osobna staje się łatwe. Ilekroć w programie wystąpi błąd, można łatwo zbadać wadliwe funkcje i poprawić tylko te błędy. Możesz łatwo wywoływać i korzystać z funkcji, gdy są potrzebne, co automatycznie prowadzi do oszczędności czasu i miejsca.
Biblioteka kontra. Funkcje zdefiniowane przez użytkownika
Każdy program w języku C ma co najmniej jedną funkcję, która jest funkcją główną, ale program może mieć dowolną liczbę funkcji. Funkcja main () w C jest punktem wyjścia programu.
W programowaniu w C funkcje dzielą się na dwa typy:
- Funkcje biblioteczne
- Funkcje zdefiniowane przez użytkownika
Różnica między biblioteką a funkcjami zdefiniowanymi przez użytkownika w C polega na tym, że nie musimy pisać kodu dla funkcji bibliotecznej. Jest już obecny w pliku nagłówkowym, który zawsze umieszczamy na początku programu. Wystarczy wpisać nazwę funkcji i użyć jej wraz z odpowiednią składnią. Printf, scanf to przykłady funkcji bibliotecznych.
Natomiast funkcja zdefiniowana przez użytkownika to typ funkcji, w którym musimy napisać treść funkcji i wywołać ją za każdym razem, gdy chcemy, aby wykonała ona jakąś operację w naszym programie.
Funkcja zdefiniowana przez użytkownika w C jest zawsze pisana przez użytkownika, ale później może być częścią biblioteki 'C'. Jest to główna zaleta programowania w 'C'.
Funkcje programowania C są podzielone na trzy działania, takie jak:
- Deklaracja funkcji
- Definicja funkcji
- Wywołanie funkcji
Deklaracja funkcji
Deklaracja funkcji oznacza napisanie nazwy programu. Jest to obowiązkowy element korzystania z funkcji w kodzie. W deklaracji funkcji po prostu podajemy nazwę funkcji, której będziemy używać w programie, podobnie jak w deklaracji zmiennej. Nie możemy użyć funkcji, jeśli nie została ona zadeklarowana w programie. Deklaracja funkcji jest również nazywana „prototypem funkcji”.
Deklaracje funkcji (zwane prototypami) są zwykle wykonywane nad funkcją main () i przyjmują ogólną postać:
return_data_type function_name (data_type arguments);
- return_data_type: jest typem danych funkcji wartości zwracanej do instrukcji wywołującej.
- Po nazwie funkcji następują nawiasy
- Nazwy argumentów z deklaracjami typów danych są opcjonalnie umieszczane w nawiasach.
Rozważymy następujący program, który pokazuje, jak zadeklarować funkcję sześcianu, aby obliczyć wartość sześcianu zmiennej całkowitej
#include <stdio.h> /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main() {
Należy pamiętać, że funkcja niekoniecznie zwraca wartość. W tym przypadku używane jest słowo kluczowe void.
Na przykład deklaracja funkcji komunikat_wyjściowy wskazuje, że funkcja nie zwraca wartości: void komunikat_wyjściowy();
Definicja funkcji
Definicja funkcji oznacza po prostu napisanie treści funkcji. Ciało funkcji składa się z instrukcji, które mają wykonać określone zadanie. Ciało funkcji składa się z pojedynczej instrukcji lub bloku instrukcji. Jest to również obowiązkowa część funkcji.
int add(int a,int b) //function body { int c; c=a+b; return c; }
Wywołanie funkcji
Wywołanie funkcji oznacza wywołanie funkcji, gdy jest ona wymagana w programie. Gdy wywołujemy funkcję, wykonuje ona operację, do której została zaprojektowana. Wywołanie funkcji jest opcjonalną częścią programu.
result = add(4,5);
Oto kompletny kod:
#include <stdio.h> int add(int a, int b); //function declaration int main() { int a=10,b=20; int c=add(10,20); //function call printf("Addition:%d\n",c); getch(); } int add(int a,int b) //function body { int c; c=a+b; return c; }
Wyjście:
Addition:30
Argumenty funkcji
Argumenty funkcji służą do otrzymania niezbędnych wartości w wyniku wywołania funkcji. Są dopasowywani według pozycji; pierwszy argument jest przekazywany do pierwszego parametru, drugi do drugiego parametru i tak dalej.
Domyślnie argumenty są przekazywane przez wartość, w której do wywoływanej funkcji przekazywana jest kopia danych. Faktycznie przekazana zmienna nie ulegnie zmianie.
Rozważmy poniższy program, który demonstruje parametry przekazywane przez wartość:
int add (int x, int y); int main() { int a, b, result; a = 5; b = 10; result = add(a, b); printf("%d + %d\ = %d\n", a, b, result); return 0;} int add (int x, int y) { x += y; return(x);}
Wyjście programu to:
5 + 10 = 15
Należy pamiętać, że wartości a i b przekazane do funkcji add nie uległy zmianie, ponieważ do parametru x przekazano jedynie ich wartość.
Zmienny zakres
Zasięg zmiennej oznacza widoczność zmiennych w kodzie programu.
W języku C zmienne zadeklarowane wewnątrz funkcji są lokalne dla tego bloku kodu i nie można się do nich odwoływać poza funkcją. Natomiast zmienne zadeklarowane poza wszystkimi funkcjami są globalne i dostępne z poziomu całego programu. Stałe zadeklarowane za pomocą #define na początku programu są dostępne z poziomu całego programu. Rozważmy poniższy program, który wyświetla wartość zmiennej globalnej zarówno z funkcji głównej, jak i zdefiniowanej przez użytkownika:
#include <stdio.h> int global = 1348; void test(); int main() { printf("from the main function : global =%d \n", global); test () ; return 0;} void test (){ printf("from user defined function : global =%d \n", global);}
Wynik:
from the main function : global =1348 from user defined function : global =1348
Omawiamy szczegóły programu:
- Deklarujemy zmienną globalną typu całkowitego z wartością początkową 1348.
- Deklarujemy i definiujemy funkcję test(), która nie przyjmuje argumentów ani nie zwraca wartości. Ta funkcja drukuje jedynie wartość zmiennej globalnej, aby zademonstrować, że dostęp do zmiennych globalnych można uzyskać w dowolnym miejscu programu.
- Drukujemy zmienną globalną w obrębie funkcji głównej.
- Wywołujemy funkcję testową w celu wydrukowania wartości zmiennej globalnej.
W języku C, gdy argumenty są przekazywane do parametrów funkcji, parametry te zachowują się jak zmienne lokalne, które zostaną zniszczone podczas opuszczania funkcji.
Podczas korzystania zmienne globalne, używaj ich ostrożnie, ponieważ mogą prowadzić do błędów i mogą zmieniać się w dowolnym miejscu programu. Należy je zainicjować przed użyciem.
Zmienne statyczne
Zmienne statyczne mają zasięg lokalny. Jednak nie są niszczone podczas wychodzenia z funkcji. Dlatego zmienna statyczna zachowuje swoją wartość na zawsze i można uzyskać do niej dostęp, gdy funkcja jest ponownie otwierana. Zmienna statyczna jest inicjowana podczas deklarowania i potrzebuje prefiksu static.
Poniższy program używa zmiennej statycznej:
#include <stdio.h> void say_hi(); int main() { int i; for (i = 0; i < 5; i++) { say_hi();} return 0;} void say_hi() { static int calls_number = 1; printf("Hi number %d\n", calls_number); calls_number ++; }
Program wyświetla:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Funkcje rekurencyjne
Rozważ silnię liczby, którą obliczamy następująco: 6! =6*5*4*3*2*1.
To obliczenie jest wykonywane w formie wielokrotnego obliczania faktu * (fakt -1), aż fakt będzie równy 1.
Funkcja rekurencyjna to funkcja, która wywołuje samą siebie i zawiera warunek wyjścia w celu zakończenia wywołań rekurencyjnych. W przypadku obliczenia liczby silni, warunek wyjścia jest równy 1. Rekurencja działa poprzez „układanie” wywołań, aż warunek wyjścia będzie prawdziwy.
Na przykład:
#include <stdio.h> int factorial(int number); int main() { int x = 6; printf("The factorial of %d is %d\n", x, factorial(x)); return 0;} int factorial(int number) { if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number - 1)); }
Program wyświetla:
The factorial of 6 is 720
Tutaj omawiamy szczegóły programu:
- Deklarujemy naszą rekurencyjną funkcję silni, która przyjmuje parametr całkowity i zwraca silnię tego parametru. Ta funkcja wywoła się sama i zmniejszy liczbę, aż do osiągnięcia warunku wyjściowego lub podstawowego. Gdy warunek jest spełniony, wcześniej wygenerowane wartości zostaną pomnożone przez siebie i zwrócona zostanie ostateczna wartość silni.
- Deklarujemy i inicjujemy zmienną całkowitą o wartości „6”, a następnie drukujemy jej wartość silni, wywołując naszą funkcję silni.
Aby lepiej zrozumieć mechanizm rekurencyjny, który polega na wywołaniu samej funkcji do momentu wystąpienia przypadku bazowego lub zatrzymania, należy zapoznać się z poniższym wykresem.ping warunek zostanie osiągnięty, a następnie zbieramy poprzednie wartości:
Funkcje wbudowane
Funkcja w programowaniu C służy do przechowywania najczęściej używanych instrukcji. Służy do modularyzacji programu.
Za każdym razem, gdy wywoływana jest funkcja, wskaźnik instrukcji przeskakuje do definicji funkcji. Po wykonaniu funkcji wskaźnik instrukcji wraca do instrukcji, z której przeskoczył do definicji funkcji.
Ilekroć używamy funkcji, potrzebujemy dodatku wskaźnik przejdź do definicji funkcji i wróć do instrukcji. Aby wyeliminować potrzebę stosowania takich głów wskaźników, używamy funkcji wbudowanych.
W funkcji inline wywołanie funkcji jest bezpośrednio zastępowane przez rzeczywisty kod programu. Nie przechodzi do żadnego bloku, ponieważ wszystkie operacje są wykonywane wewnątrz funkcji inline.
Funkcje wbudowane są najczęściej używane do małych obliczeń. Nie nadają się, gdy w grę wchodzą duże obliczenia.
Funkcja inline jest podobna do normalnej funkcji, z tym wyjątkiem, że słowo kluczowe inline jest umieszczane przed nazwą funkcji. Funkcje inline są tworzone za pomocą następującej składni:
inline function_name ()
{
//function definition
}
Napiszmy program implementujący funkcję inline.
inline int add(int a, int b) //inline function declaration { return(a+b); } int main() { int c=add(10,20); printf("Addition:%d\n",c); getch(); }
Wyjście:
Addition: 30
Powyższy program demonstruje użycie funkcji inline do dodawania dwóch liczb. Jak widać, zwróciliśmy dodawanie dwóch liczb tylko w funkcji inline bez pisania żadnych dodatkowych wierszy. Podczas wywołania funkcji przekazaliśmy tylko wartości, na których musimy wykonać dodawanie.




