Što je funkcija u C?
Funkcija u programiranju C je blok koda za višekratnu upotrebu koji olakšava razumijevanje, testiranje programa i može se lako modificirati bez promjene programa koji poziva. Funkcije dijele kôd i moduliraju program za bolje i učinkovitije rezultate. Ukratko, veći program podijeljen je u razne potprograme koji se nazivaju funkcijama
Kada velik program podijelite na razne funkcije, lako je upravljati svakom funkcijom pojedinačno. Kad god se u programu dogodi pogreška, lako možete istražiti neispravne funkcije i ispraviti samo te pogreške. Možete jednostavno nazvati i koristiti funkcije kad god su potrebne, što automatski dovodi do uštede vremena i prostora.
U ovom vodiču naučit ćete-
- Biblioteka vs. Korisnički definirane funkcije
- Izjava o funkciji
- Definicija funkcije
- Poziv funkcije
- Argumenti funkcije
- Promjenjivi opseg
- Statičke varijable
- Rekurzivne funkcije
- Inline funkcije
Biblioteka vs. Korisnički definirane funkcije
Svaki program 'C' ima barem jednu funkciju koja je glavna funkcija, ali program može imati bilo koji broj funkcija. Glavna () funkcija u C početna je točka programa.
U programiranju 'C' funkcije su podijeljene u dvije vrste:
- Funkcije knjižnice
- Korisnički definirane funkcije
Razlika između knjižnične i korisnički definirane funkcije u C je u tome što ne trebamo pisati kod za knjižničnu funkciju. Već je prisutan u zaglavnoj datoteci koju uvijek uključujemo na početku programa. Jednostavno morate upisati ime funkcije i koristiti ga zajedno s odgovarajućom sintaksom. Printf, scanf su primjeri funkcije knjižnice.
Dok je korisnički definirana funkcija vrsta funkcije u kojoj moramo napisati tijelo funkcije i pozvati funkciju kad god nam je potrebna funkcija da bi izvršila neku operaciju u našem programu.
Korisnički definiranu funkciju u C uvijek napiše korisnik, ali kasnije može biti dio biblioteke 'C'. To je glavna prednost programiranja 'C'.
Funkcije programiranja C podijeljene su u tri aktivnosti kao što su,
- Izjava o funkciji
- Definicija funkcije
- Poziv funkcije
Izjava o funkciji
Izjava o funkciji znači pisanje naziva programa. To je obvezni dio za upotrebu funkcija u kodu. U deklaraciji funkcije samo navodimo ime funkcije koju ćemo koristiti u našem programu poput deklaracije varijable. Ne možemo koristiti funkciju ako nije deklarirana u programu. Deklaracija funkcije također se naziva " Prototip funkcije ".
Deklaracije funkcije (zvane prototip) obično se rade iznad glavne () funkcije i poprimaju opći oblik:
return_data_type function_name (data_type arguments);
- Return_data_type : je tip podataka o funkciji vrijednosti vraćene natrag na poziv i gubitka.
- Za funkciju : slijedi zagradama
- Imena argumenata s njihovim deklaracijama tipova podataka po želji se stavljaju u zagrade.
Razmatramo sljedeći program koji pokazuje kako se deklarira funkcija kocke za izračunavanje vrijednosti kocke cjelobrojne varijable
#include/*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {
Imajte na umu da funkcija ne mora nužno vratiti vrijednost. U ovom se slučaju koristi ključna riječ void.
Na primjer, izjava funkcije output_message označava da funkcija ne vraća vrijednost: void output_message ();
Definicija funkcije
Definicija funkcije znači samo pisanje tijela funkcije. Tijelo funkcije sastoji se od naredbi koje će izvršiti određeni zadatak. Tijelo funkcije sastoji se od jednog ili bloka naredbi. Također je obvezni dio funkcije.
int add(int a,int b) //function body{int c;c=a+b;return c;}
Poziv funkcije
Poziv funkcije znači pozivanje funkcije kad god je to potrebno u programu. Kad god zovemo funkciju, ona izvodi operaciju za koju je i dizajnirana. Poziv funkcije neobavezan je dio programa.
result = add(4,5);
Evo potpunog koda:
#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;}
Izlaz:
Addition:30
Argumenti funkcije
Argumenti funkcije koriste se za primanje potrebnih vrijednosti pozivom funkcije. Poklapaju se prema položaju; prvi se argument prosljeđuje prvom parametru, drugi drugom parametru i tako dalje.
Prema zadanim postavkama, argumenti se prenose prema vrijednosti u kojoj se kopija podataka daje pozvanoj funkciji. Stvarno proslijeđena varijabla neće se promijeniti.
Smatramo sljedeći program koji prikazuje parametre proslijeđene po vrijednosti:
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);}
Izlaz programa je:
5 + 10 = 15
Imajte na umu da vrijednosti a i b prosljeđene funkciji dodavanja nisu promijenjene jer je samo njena vrijednost proslijeđena u parametar x.
Promjenjivi opseg
Opseg varijable znači vidljivost varijabli unutar koda programa.
U C su varijable koje su deklarirane unutar funkcije lokalne za taj blok koda i na njih se ne može uputiti izvan funkcije. Međutim, varijable koje su deklarirane izvan svih funkcija globalne su i dostupne iz cijelog programa. Konstante deklarirane s #define na vrhu programa dostupne su iz cijelog programa. Razmatramo sljedeći program koji ispisuje vrijednost globalne varijable i iz glavne i iz korisnički definirane funkcije:
#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);}
Proizlaziti:
from the main function : global =1348from user defined function : global =1348
Razgovaramo o detaljima programa:
- Deklariramo cjelovitu globalnu varijablu s 1348 kao početnu vrijednost.
- Deklariramo i definiramo funkciju test () koja niti uzima argumente niti vraća vrijednost. Ova funkcija ispisuje samo vrijednost globalne varijable kako bi pokazala da se globalnim varijablama može pristupiti bilo gdje u programu.
- Ispisujemo globalnu varijablu unutar glavne funkcije.
- Pozivamo funkciju ispitivanja u orde za ispis vrijednosti globalne varijable.
U C, kada se argumenti prosljeđuju parametrima funkcije, parametri djeluju kao lokalne varijable koje će se uništiti prilikom izlaska iz funkcije.
Kada koristite globalne varijable, koristite ih oprezno jer mogu dovesti do pogrešaka i mogu se promijeniti bilo gdje u programu. Trebali bi ih inicijalizirati prije upotrebe.
Statičke varijable
Statičke varijable imaju lokalni opseg. Međutim, oni se ne uništavaju prilikom izlaska iz funkcije. Stoga statička varijabla zauvijek zadržava svoju vrijednost i može joj se pristupiti kad se funkcija ponovo unese. Statička varijabla inicijalizira se kada je deklarirana i treba joj prefiks static.
Sljedeći program koristi statičku varijablu:
#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 prikazuje:
Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5
Rekurzivne funkcije
Razmotrimo faktorijel broja koji se izračunava kako slijedi 6! = 6 * 5 * 4 * 3 * 2 * 1.
Ovaj se izračun vrši kao opetovano izračunavanje činjenice * (činjenica -1) dok činjenica nije jednaka 1.
Rekurzivna funkcija je funkcija koja se sama poziva i uključuje uvjet izlaza kako bi završila rekurzivne pozive. U slučaju izračuna faktorskog broja, izlazni uvjet je činjenica jednako 1. Rekurzija djeluje "slaganjem" poziva sve dok izlazni uvjet nije istinit.
Na primjer:
#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 prikazuje:
The factorial of 6 is 720
Ovdje razgovaramo o pojedinostima programa:
- Deklariramo svoju rekurzivnu faktorijelnu funkciju koja uzima cjelobrojni parametar i vraća faktorijel ovog parametra. Ova će se funkcija pozvati i smanjivati broj dok ne izađe ili ne postigne osnovni uvjet. Kada je uvjet istinit, prethodno generirane vrijednosti množit će se jedna s drugom, a konačna faktorska vrijednost vraća se.
- Deklariramo i inicijaliziramo cjelobrojnu varijablu s vrijednošću "6", a zatim ispisujemo njezinu faktorijelsku vrijednost pozivanjem naše faktorijelne funkcije.
Razmotrite sljedeću tablicu da biste bolje razumjeli rekurzivni mehanizam koji se sastoji od poziva funkcije same sebe dok se ne postigne osnovni slučaj ili zaustavni uvjet, a nakon toga prikupljamo prethodne vrijednosti:
Inline funkcije
Funkcija u programiranju na C koristi se za pohranu najčešće korištenih uputa. Koristi se za modularizaciju programa.
Kad god se funkcija pozove, pokazivač uputa preskače na definiciju funkcije. Nakon izvršavanja funkcije, pokazivač uputa vraća se na izraz odakle je skočio na definiciju funkcije.
Kad god koristimo funkcije, potrebna nam je dodatna glava pokazivača za skok na definiciju funkcije i povratak na izraz. Da bismo eliminirali potrebu za takvim glavama pokazivača, koristimo ugrađene funkcije.
U ugrađenoj funkciji, poziv funkcije izravno se zamjenjuje stvarnim programskim kodom. Ne preskače ni na jedan blok jer se sve operacije izvode unutar ugrađene funkcije.
Ugrađene funkcije uglavnom se koriste za male proračune. Nisu prikladni kada je uključeno veliko računanje.
Inline funkcija slična je normalnoj funkciji, osim što se ključna riječ inline nalazi ispred imena funkcije. Inline funkcije kreiraju se sa sljedećom sintaksom:
inline function_name (){//function definition}
Napišimo program za implementaciju ugrađene funkcije.
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();}
Izlaz:
Addition: 30
Gornji program pokazuje upotrebu ugrađene funkcije za zbrajanje dva broja. Kao što vidimo, zbrajanje smo vratili na dva broja unutar funkcije inline samo bez upisivanja dodatnih crta. Tijekom poziva funkcije upravo smo proslijedili vrijednosti na kojima moramo izvršiti zbrajanje.
Sažetak
- Funkcija je mini-program ili potprogram.
- Funkcije se koriste za modularizaciju programa.
- Biblioteka i korisnički definirane dvije su vrste funkcija.
- Funkcija se sastoji od deklaracije, tijela funkcije i dijela poziva funkcije.
- Izjava o funkciji i tijelo su obvezni.
- Poziv funkcije može biti neobavezan u programu.
- C program ima barem jednu funkciju; to je glavna funkcija ().
- Svaka funkcija ima ime, vrstu podataka povratne vrijednosti ili praznine, parametre.
- Svaka funkcija mora biti definirana i deklarirana u vašem C programu.
- Imajte na umu da se obične varijable u funkciji C uništavaju čim izađemo iz poziva funkcije.
- Argumenti prosljeđeni funkciji neće se mijenjati jer su ih prosljeđivali po vrijednosti niti po adresi.
- Opseg varijable naziva se vidljivost varijabli unutar programa
- U programiranju na C postoje globalne i lokalne varijable