Svaki C program je skup funkcija. Saznajte sve o ovim korisnim dijelovima koda koji se mogu ponovno koristiti, od toga kako ih definirati do onoga što znači praznina.
Možda ste pokrili osnovnu C sintaksu, s jednostavnim primjerima, a sada se pitate kako napraviti veće programe iz stvarnog svijeta. Za početak, htjet ćete organizirati svoj kod u učinkovite dijelove, s minimalnim brojem ponavljanja. U C-u, kao iu većini jezika, odgovor na vaše probleme je funkcija.
Stvaranje i korištenje funkcija u C-u jednostavno je i donosi mnoge prednosti. Funkcije vam omogućuju rastavljanje složenih programa na manje dijelove. Oni pružaju mogućnost ponovne upotrebe, kako unutar vašeg izvornog programa, tako iu povezanim bibliotekama ili drugim zasebnim programima.
Za početak ćete morati naučiti o deklaracijama funkcija, prototipovima, parametrima i povratnim izjavama.
Što su funkcije u C-u?
U C programiranju, funkcija je imenovani dio koda koji radi nešto kada to od nje zatražite. Pomaže da vaš kod bude organiziran i omogućuje vam korištenje iste radnje više puta bez ponavljanja.
Najjednostavniji primjer je onaj koji ste već koristili: funkcija main(). Glavna funkcija posebno je posebna jer djeluje kao glavna ulazna točka za bilo koji C program. Također možete koristiti funkcije biblioteke, a to su one koje je netko već napisao, ili možete napisati svoje vlastite korisnički definirane funkcije.
Funkcije: deklariranje, definiranje i pozivanje
Ova tri aspekta temeljna su za korištenje funkcija.
Deklaracija funkcije
Ovo pruža informacije o nazivu funkcije, vrsti povrata i parametrima, omogućujući njezinu upotrebu prije pune definicije. Također se naziva i prototip funkcije. Slijedi ovu jednostavnu sintaksu:
return_type function_name(parameters);
Gdje:
- return_type je tip podataka vrijednosti koju funkcija vraća. To može biti bilo koji valjani C tip podataka ili poništiti ako funkcija ne vrati vrijednost.
- naziv_funkcije je naziv koji dajete funkciji. Ovo ćete koristiti za kasnije pozivanje funkcije.
- parametri je popis ulaznih parametara koje funkcija prihvaća, ako ih ima. Svaki parametar sastoji se od tipa podataka iza kojeg slijedi naziv parametra odvojen zarezima.
Na primjer, ovdje je jednostavna deklaracija funkcije:
intadd(int a, int b);
Definicija funkcije
Kada pozovete funkciju, ona pokreće kod naveden u svojoj definiciji. Uključuje naziv funkcije, vrstu povrata, popis parametara i izjave koje definiraju njezino ponašanje. Evo sintakse:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Razdvojimo dijelove sintakse:
Funkcijsko tijelo: Ovo je blok koda u vitičastim zagradama {}. Sadrži upute koje definiraju što funkcija radi kada se pozove.
Izjava o povratu: Ako funkcija ima tip povrata različit od poništiti, the povratak izjava šalje vrijednost natrag pozivatelju. Ova vrijednost treba odgovarati navedenoj vrsti povrata.
Evo jednostavnog primjera definicije funkcije:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Poziv funkcije
Kao i kod kuhanja, možete imati recept (definicija funkcije) i neke sastojke (argumente), ali svejedno morate slijediti upute da biste dobili rezultat. Poziv funkcije će pokrenuti funkciju sa zadanim argumentima; evo sintakse:
return_type result = function_name(arguments);
argumenti: Ovo su vrijednosti ili izrazi koje prosljeđujete funkciji kao ulaze. Svaki argument odvojite zarezom. Broj, redoslijed i tipovi podataka argumenata trebaju odgovarati popisu parametara funkcije.
proizlaziti: Ako funkcija ima tip povrata različit od poništiti, možete uhvatiti vraćenu vrijednost pomoću varijable odgovarajuće vrste podataka.
Evo primjera poziva funkcije:
#include
// Function prototype
intadd(int a, int b);intmain(){
int x = 5, y = 3;// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}
// Function definition
intadd(int a, int b){
return a + b;
}
Prateći ova tri koraka—deklariranje funkcije, pružanje njezine implementacije i njezino pozivanje s odgovarajućim argumentima—možete učinkovito koristiti funkcije za obavljanje raznih zadataka u svom program.
Parametri funkcije i povratne vrijednosti
Parametri su varijable deklarirane u deklaraciji ili definiciji funkcije koje djeluju kao rezervirana mjesta za vrijednosti proslijeđene funkciji kada se pozove. Oni vam omogućuju prosljeđivanje podataka u funkciju, omogućujući joj rad s tim podacima i manipuliranje njima. Povratne vrijednosti su vrijednosti koje funkcija proizvodi i šalje natrag pozivatelju.
Postoje dvije metode prosljeđivanja parametara.
Prijeđi po vrijednosti
Ovim pristupom, poziv funkcije kopira vrijednost stvarnog argumenta u parametar funkcije. Promjene parametra unutar funkcije ne utječu na izvorni argument.
Na primjer:
#include
intsquare(int num){
num = num * num;
return num;
}intmain(){
int x = 5;
int y = square(x);// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);
return0;
}
- Kvadratna funkcija uzima cjelobrojni parametar, br.
- Funkcija square izračunava kvadrat od num, ažurira njegovu vrijednost i vraća tu novu vrijednost.
- Glavna funkcija deklarira cjelobrojnu varijablu, x, i dodjeljuje mu vrijednost 5.
- Zatim poziva kvadratnu funkciju, prosljeđujući joj vrijednost x. Rezultat dodjeljuje drugoj varijabli, g.
- Nakon poziva funkcije, main ispisuje vrijednosti x i y. Vrijednost x ostaje ista jer promjena parametra num unutar kvadrata ne utječe na izvorni x.
Prijeđi referencom
Koristeći ovaj pristup, prosljeđujete memorijsku adresu (pokazivač) vrijednosti funkciji. Promjene učinjene na parametru unutar funkcije utječu na izvornu vrijednost izvan nje.
Pokazivači, uključujući njihovu upotrebu kao parametara, jedan su od aspekata C koji ga čine drugačijim od jezika poput Pythona.
#include
voidsquare(int *num){
*num = *num * *num;
}intmain(){
int x = 5;
square(&x);
// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}
- The kvadrat funkcija uzima cjelobrojni pokazivač (int *) parametar, br. Ne vraća vrijednost.
- Funkcija kvadrat izračunava kvadrat vrijednosti koja br sadrži i ažurira tu vrijednost pomoću operatora dereference pokazivača, *.
- The glavni funkcija deklarira cjelobrojnu varijablu, x, i dodjeljuje mu vrijednost 5.
- Zatim poziva kvadrat funkcija s pokazivačem na x koristeći adresu operatera: &x.
- Nakon poziva funkcije, main ispisuje vrijednost x, koji je sada 25 od promjena na *br unutar kvadrat funkcija utječe na izvornik x.
Ukratko, ključna razlika između dviju metoda je kako promjene parametra unutar funkcije utječu na izvornu vrijednost izvan nje. Prijenos po vrijednosti stvara kopiju, dok prijenos po referenci (pokazivač) omogućuje izravnu manipulaciju izvorne vrijednosti.
Drugi jezici često imaju ekvivalent C pokazivača, ali općenito rade na višoj razini. Jedan primjer je C# podrška za izlazne varijable.
Prazne funkcije
Void funkcije u C programiranju su funkcije koje ne vraćaju vrijednost. Koristite ih za izvođenje radnji ili zadataka bez proizvođenja rezultata. Oni mogu mijenjati svoje parametre koristeći pass by reference, ali ne moraju.
Evo primjera void funkcije:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Void funkcije korisne su za izvođenje radnji, ispis poruka, modificiranje podataka ili izvršavanje zadataka bez potrebe za vraćanjem vrijednosti.
Istražite funkcije u C programiranju
Vježbanje kroz stvaranje funkcija poboljšava vaše razumijevanje i primjenu C programiranja. Nadalje, poboljšava čitljivost koda i jednostavnost održavanja. Zaronite u razne primjene funkcija kako biste otključali njihove prednosti.
Kada svladate osnove C funkcija i želite sami sebi izazvati izazov, razmislite o zadubljenju u rekurziju.