Co to jest funkcja w C?
Funkcja w języku C to blok kodu wielokrotnego użytku, który ułatwia zrozumienie i testowanie programu oraz można go łatwo modyfikować bez zmiany programu wywołującego. Funkcje dzielą kod i modularyzują program w celu uzyskania lepszych i skutecznych wyników. Krótko mówiąc, większy program jest podzielony na różne podprogramy, które nazywane są funkcjami
Gdy podzielisz duży program na różne funkcje, zarządzanie każdą funkcją z osobna stanie 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 używać funkcji, kiedy tylko są potrzebne, co automatycznie prowadzi do oszczędności czasu i miejsca.
W tym samouczku nauczysz się:
- Biblioteka Vs. Funkcje zdefiniowane przez użytkownika
- Deklaracja funkcji
- Definicja funkcji
- Wywołanie funkcji
- Argumenty funkcji
- Zmienny zakres
- Zmienne statyczne
- Funkcje rekurencyjne
- Funkcje wbudowane
Biblioteka Vs. Funkcje zdefiniowane przez użytkownika
Każdy program „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 `` C '' funkcje są podzielone 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 jest rodzajem funkcji, w której musimy napisać treść funkcji i wywołać ją za każdym razem, gdy wymagamy, aby funkcja wykonała jakąś operację w naszym programie.
Funkcja zdefiniowana przez użytkownika w C jest zawsze zapisywana przez użytkownika, ale później może być częścią biblioteki „C”. Jest to główna zaleta programowania w języku „C”.
Funkcje programowania C są podzielone na trzy czynności, takie jak:
- Deklaracja funkcji
- Definicja funkcji
- Wywołanie funkcji
Deklaracja funkcji
Deklaracja funkcji oznacza zapisanie nazwy programu. Jest to obowiązkowa część do używania funkcji w kodzie. W deklaracji funkcji po prostu określamy nazwę funkcji, której będziemy używać w naszym programie, takiej jak deklaracja zmiennej. Nie możemy używać funkcji, jeśli nie jest zadeklarowana w programie. Deklaracja funkcji jest również nazywana „ prototypem funkcji ”.
Deklaracje funkcji (zwane prototypem) są zwykle wykonywane nad funkcją main () i przyjmują postać ogólną:
return_data_type function_name (data_type arguments);
- Return_data_type : jest typ danych funkcji wartość zwracana z powrotem do rachunku dzwonisz.
- Function_name : następuje nawiasach
- Nazwy argumentów wraz z ich deklaracjami typu danych są opcjonalnie umieszczane w nawiasach.
Rozważymy następujący program, który pokazuje, jak zadeklarować funkcję kostki w celu obliczenia wartości kostki zmiennej całkowitej
#include/*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {
Pamiętaj, że funkcja niekoniecznie zwraca wartość. W tym przypadku używane jest słowo kluczowe void.
Na przykład deklaracja funkcji output_message wskazuje, że funkcja nie zwraca wartości: void output_message ();
Definicja funkcji
Definicja funkcji oznacza po prostu napisanie treści funkcji. Treść funkcji składa się z instrukcji, które mają wykonać określone zadanie. Treść funkcji składa się z pojedynczej instrukcji lub z 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 zawsze, gdy jest to wymagane w programie. Za każdym razem, gdy wywołujemy funkcję, wykonuje ona operację, dla której została zaprojektowana. Wywołanie funkcji jest opcjonalną częścią programu.
result = add(4,5);
Oto kompletny kod:
#includeint add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}
Wynik:
Addition:30
Argumenty funkcji
Argumenty funkcji służą do otrzymywania niezbędnych wartości przez wywołanie funkcji. Są dopasowane według pozycji; pierwszy argument jest przekazywany do pierwszego parametru, drugi do drugiego i tak dalej.
Domyślnie argumenty są przekazywane według wartości, w której kopia danych jest przekazywana wywoływanej funkcji. Faktycznie przekazana zmienna nie ulegnie zmianie.
Rozważymy następujący 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);}
Wynik programu to:
5 + 10 = 15
Należy pamiętać, że wartości a i b zostały przekazane do funkcji add nie zostały zmienione, ponieważ tylko jej wartość została przekazana do parametru x.
Zmienny zakres
Zakres zmienny 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ą. Jednak zmienne, które są zadeklarowane poza wszystkimi funkcjami, są globalne i dostępne z całego programu. Stałe zadeklarowane z #define na początku programu są dostępne z całego programu. Rozważymy następujący program, który wypisuje wartość zmiennej globalnej zarówno z funkcji głównej, jak i zdefiniowanej przez użytkownika:
#includeint 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 =1348from user defined function : global =1348
Omawiamy szczegóły programu:
- Deklarujemy całkowitą zmienną globalną z 1348 jako wartością początkową.
- Deklarujemy i definiujemy funkcję test (), która nie przyjmuje argumentów ani nie zwraca wartości. Ta funkcja wyświetla tylko wartość zmiennej globalnej, aby zademonstrować, że zmienne globalne są dostępne w dowolnym miejscu programu.
- Drukujemy zmienną globalną w ramach funkcji main.
- Wywołujemy funkcję test w orde, aby wypisać wartość zmiennej globalnej.
W języku C, gdy argumenty są przekazywane do parametrów funkcji, parametry działają jak zmienne lokalne, które zostaną zniszczone po wyjściu z funkcji.
Kiedy używasz zmiennych globalnych, używaj ich ostrożnie, ponieważ mogą prowadzić do błędów i mogą się zmienić w dowolnym miejscu programu. Powinny zostać zainicjowane przed użyciem.
Zmienne statyczne
Zmienne statyczne mają zasięg lokalny. Jednak nie są one niszczone podczas wychodzenia z funkcji. Dlatego zmienna statyczna zachowuje swoją wartość na zawsze i jest dostępna po ponownym wprowadzeniu funkcji. Zmienna statyczna jest inicjowana po zadeklarowaniu i wymaga prefiksu static.
Poniższy program używa zmiennej statycznej:
#includevoid 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 1Hi number 2Hi number 3Hi number 4Hi number 5
Funkcje rekurencyjne
Rozważ silnię liczby, która jest obliczana w następujący sposób 6! = 6 * 5 * 4 * 3 * 2 * 1.
To obliczenie jest wykonywane jako wielokrotne obliczanie faktu * (fakt -1), dopóki fakt nie 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 obliczania liczby silni warunkiem zakończenia jest fakt równy 1. Rekurencja działa przez „układanie w stos” wywołań, dopóki warunek wyjścia nie będzie spełniony.
Na przykład:
#includeint 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 */elsereturn (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 będący liczbą całkowitą i zwraca silnię tego parametru. Funkcja ta wywoła samą siebie i zmniejszy liczbę do momentu zakończenia lub osiągnięcia warunku podstawowego. Gdy warunek jest spełniony, poprzednio wygenerowane wartości zostaną pomnożone przez siebie, a ostateczna wartość silni zostanie zwrócona.
- Deklarujemy i inicjalizujemy zmienną całkowitą o wartości "6", a następnie drukujemy jej silnię, wywołując naszą funkcję silni.
Rozważ poniższy wykres, aby lepiej zrozumieć mechanizm rekurencyjny, który polega na nazywaniu funkcji sobą, dopóki nie zostanie osiągnięty przypadek podstawowy lub warunek zatrzymania, a następnie zbieramy poprzednie wartości:
Funkcje wbudowane
Funkcja w programowaniu w 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, skąd przeskoczył do definicji funkcji.
Ilekroć używamy funkcji, potrzebujemy dodatkowej główki wskaźnika, aby przejść do definicji funkcji i powrócić do instrukcji. Aby wyeliminować potrzebę takich głowic wskaźników, używamy funkcji inline.
W funkcji wbudowanej wywołanie funkcji jest bezpośrednio zastępowane przez rzeczywisty kod programu. Nie przeskakuje do żadnego bloku, ponieważ wszystkie operacje są wykonywane wewnątrz funkcji wbudowanej.
Funkcje wbudowane są najczęściej używane do małych obliczeń. Nie są one odpowiednie w przypadku dużych komputerów.
Funkcja wbudowana jest podobna do zwykłej funkcji, z tym wyjątkiem, że słowo kluczowe inline jest umieszczane przed nazwą funkcji. Funkcje wbudowane są tworzone przy użyciu następującej składni:
inline function_name (){//function definition}
Napiszmy program do implementacji funkcji 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();}
Wynik:
Addition: 30
Powyższy program demonstruje użycie funkcji inline do dodawania dwóch liczb. Jak widzimy, zwróciliśmy sumowanie na dwóch liczbach tylko w funkcji inline bez pisania żadnych dodatkowych linii. Podczas wywołania funkcji właśnie przekazaliśmy wartości, na których musimy dokonać dodania.
Podsumowanie
- Funkcja to miniprogram lub podprogram.
- Funkcje służą do modularyzacji programu.
- Biblioteka i zdefiniowane przez użytkownika to dwa typy funkcji.
- Funkcja składa się z deklaracji, treści funkcji i części wywołania funkcji.
- Deklaracja funkcji i treść są obowiązkowe.
- Wywołanie funkcji może być opcjonalne w programie.
- Program w C ma co najmniej jedną funkcję; jest to główna funkcja ().
- Każda funkcja ma nazwę, typ danych wartości zwracanej lub void, parametry.
- Każda funkcja musi być zdefiniowana i zadeklarowana w programie w C.
- Pamiętaj, że zwykłe zmienne w funkcji C są niszczone, gdy tylko wyjdziemy z wywołania funkcji.
- Argumenty przekazane do funkcji nie zostaną zmienione, ponieważ zostały przekazane jako wartość żadna z adresu.
- Zakres zmiennej określa się jako widoczność zmiennych w programie
- W programowaniu w C. istnieją zmienne globalne i lokalne