Hvert C-program er en samling funksjoner. Finn ut alt om disse nyttige gjenbrukbare kodebitene, fra hvordan du definerer dem til hva tomhet betyr.
Du har kanskje dekket grunnleggende C-syntaks, med enkle eksempler, og lurer nå på hvordan du skal gå frem for å lage større, virkelige programmer. Til å begynne med vil du organisere koden din i effektive deler, med et minimum av repetisjoner. I C, som i de fleste språk, er svaret på problemene funksjonen.
Å lage og bruke funksjoner i C er enkelt og gir mange fordeler. Funksjoner lar deg bryte ned komplekse programmer i mindre biter. De gir gjenbrukbarhet, både i det originale programmet og i relaterte biblioteker eller andre separate programmer.
For å starte, må du lære om funksjonserklæringer, prototyper, parametere og retursetninger.
Hva er funksjoner i C?
I C-programmering, er en funksjon en navngitt kodedel som gjør noe når du ber den om det. Det hjelper med å holde koden din organisert og lar deg bruke den samme handlingen flere ganger uten å gjenta deg selv.
Det enkleste eksemplet er et du allerede har brukt: main()-funksjonen. Hovedfunksjonen er spesielt spesiell fordi den fungerer som hovedinngangspunktet for ethvert C-program. Du kan også bruke bibliotekfunksjoner, som er de som noen andre allerede har skrevet, eller du kan skrive dine egne brukerdefinerte funksjoner.
Funksjoner: Deklarere, definere og ringe
Disse tre aspektene er grunnleggende for bruk av funksjoner.
Funksjonserklæring
Dette gir informasjon om en funksjons navn, returtype og parametere, og muliggjør bruk før dens fulle definisjon. Det kalles også en funksjonsprototype. Den følger denne enkle syntaksen:
return_type function_name(parameters);
Hvor:
- returtype er datatypen til verdien som funksjonen returnerer. Det kan være en hvilken som helst gyldig C-datatype eller tomrom hvis funksjonen ikke returnerer en verdi.
- funksjonsnavn er navnet du gir funksjonen. Du vil bruke denne til å kalle opp funksjonen senere.
- parametere er en liste over inndataparametere funksjonen godtar, hvis noen. Hver parameter består av en datatype etterfulgt av et parameternavn atskilt med komma.
For eksempel, her er en enkel funksjonserklæring:
intadd(int a, int b);
Funksjonsdefinisjon
Når du kaller en funksjon, kjører den koden som er spesifisert i definisjonen. Den inkluderer funksjonens navn, returtype, parameterliste og setningene som definerer dens virkemåte. Her er syntaksen:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
La oss bryte ned deler av syntaksen:
Funksjonskropp: Dette er kodeblokken omsluttet av krøllete klammeparenteser {}. Den inneholder instruksjonene som definerer hva funksjonen gjør når den kalles.
Returerklæring: Hvis funksjonen har en annen returtype enn tomrom, den komme tilbake setningen sender en verdi tilbake til den som ringer. Denne verdien skal samsvare med den angitte returtypen.
Her er et enkelt eksempel på en funksjonsdefinisjon:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Funksjonsanrop
Akkurat som matlaging kan du ha en oppskrift (funksjonsdefinisjon) og noen ingredienser (argumenter), men du må fortsatt følge instruksjonene for å få et resultat. Et funksjonskall vil kjøre funksjonen med gitte argumenter; her er syntaksen:
return_type result = function_name(arguments);
argumenter: Dette er verdiene eller uttrykkene du sender til funksjonen som innganger. Skill hvert argument med komma. Antallet, rekkefølgen og datatypene til argumentene skal samsvare med funksjonens parameterliste.
resultat: Hvis funksjonen har en annen returtype enn tomrom, kan du fange opp den returnerte verdien ved å bruke en variabel av riktig datatype.
Her er et eksempel på et funksjonskall:
#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;
}
Ved å følge disse tre trinnene – deklarere funksjonen, gi dens implementering og kalle den med passende argumenter – du kan effektivt bruke funksjoner til å utføre ulike oppgaver i din program.
Funksjonsparametere og returverdier
Parametre er variabler deklarert i funksjonens erklæring eller definisjon som fungerer som plassholdere for verdiene som sendes til funksjonen når de kalles. De lar deg sende data inn i funksjonen, slik at den kan jobbe med og manipulere disse dataene. Returverdier er verdiene en funksjon produserer og sender tilbake til den som ringer.
Det er to metoder for å sende parametere.
Gå forbi verdi
Med denne tilnærmingen kopierer et funksjonskall verdien av det faktiske argumentet inn i funksjonens parameter. Endringer i parameteren i funksjonen påvirker ikke det opprinnelige argumentet.
For eksempel:
#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;
}
- Kvadratfunksjonen tar en heltallsparameter, num.
- Kvadratfunksjonen beregner kvadratet av num, oppdaterer verdien og returnerer denne nye verdien.
- Hovedfunksjonen erklærer en heltallsvariabel, x, og tildeler den verdien 5.
- Den kaller deretter kvadratfunksjonen og gir den verdien av x. Den tilordner resultatet til en annen variabel, y.
- Etter funksjonskallet skriver main ut verdiene til x og y. x-verdien forblir den samme fordi endring av num-parameteren i kvadratet ikke påvirker den opprinnelige x.
Gå forbi referanse
Ved å bruke denne tilnærmingen sender du minneadressen (pekeren) til en verdi til en funksjon. Endringer i parameteren inne i funksjonen påvirker den opprinnelige verdien utenfor den.
Pekere, inkludert deres bruk som parametere, er en av aspektene ved C som gjør det annerledes enn et språk som Python.
#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;
}
- De torget funksjonen tar en heltallspeker (int *) parameter, num. Den returnerer ikke en verdi.
- Kvadratfunksjonen beregner kvadratet av verdien som num inneholder og oppdaterer den verdien ved å bruke pekerdereference-operatoren, *.
- De hoved- funksjon erklærer en heltallsvariabel, x, og tildeler den verdien 5.
- Den kaller da torget funksjon med en peker til x ved å bruke adressen til operatøren: &x.
- Etter funksjonskallet skriver main ut verdien av x, som er nå 25 siden endringene til *antall inne i torget funksjon påvirker originalen x.
Oppsummert er nøkkelforskjellen mellom de to metodene hvordan endringer i parameteren inne i funksjonen påvirker den opprinnelige verdien utenfor den. Pass by-verdi skaper en kopi, mens pass by reference (peker) tillater direkte manipulering av den opprinnelige verdien.
Andre språk har ofte en ekvivalent med Cs pekere, men de fungerer generelt på et høyere nivå. Et eksempel er C#s støtte for ut-variabler.
Ugyldige funksjoner
Ugyldige funksjoner i C-programmering er funksjoner som ikke returnerer en verdi. Bruk dem til å utføre handlinger eller oppgaver uten å produsere et resultat. De kan endre parametrene sine ved å bruke pass by reference, men de trenger ikke.
Her er et eksempel på en void-funksjon:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Void-funksjoner er nyttige for å utføre handlinger, skrive ut meldinger, endre data eller utføre oppgaver uten å kreve en returverdi.
Utforsk funksjoner i C-programmering
Å øve gjennom å lage funksjoner forbedrer forståelsen og bruken av C-programmering. Videre øker den kodelesbarheten og enkel vedlikehold. Dykk inn i ulike applikasjoner av funksjoner for å låse opp fordelene deres.
Når du har mestret det grunnleggende i C-funksjoner og ønsker å utfordre deg selv, bør du vurdere å fordype deg i rekursjon.