Funksjoner i C-programmering med eksempler: Rekursiv & Inline

Hva er en funksjon i C?

Funksjon i C-programmering er en gjenbrukbar kodeblokk som gjรธr et program lettere รฅ forstรฅ, teste og enkelt kan modifiseres uten รฅ endre det anropende programmet. Funksjoner deler koden og modulariserer programmet for bedre og effektive resultater. Kort fortalt er et stรธrre program delt inn i ulike underprogrammer som kalles funksjoner

Hva er en funksjon i C

Nรฅr du deler opp et stort program i ulike funksjoner, blir det enkelt รฅ administrere hver funksjon individuelt. Nรฅr det oppstรฅr en feil i programmet, kan du enkelt undersรธke feilfunksjoner og korrigere bare disse feilene. Du kan enkelt ringe og bruke funksjoner nรฅr de er nรธdvendig, noe som automatisk sparer tid og plass.

Bibliotek vs. Brukerdefinerte funksjoner

Hvert 'C'-program har minst รฉn funksjon som er hovedfunksjonen, men et program kan ha et hvilket som helst antall funksjoner. Hovedfunksjonen () i C er et startpunkt for et program.

I 'C'-programmering er funksjoner delt inn i to typer:

  1. Bibliotekfunksjoner
  2. Brukerdefinerte funksjoner

Forskjellen mellom biblioteket og brukerdefinerte funksjoner i C er at vi ikke trenger รฅ skrive en kode for en bibliotekfunksjon. Den er allerede til stede inne i overskriftsfilen som vi alltid inkluderer i begynnelsen av et program. Du trenger bare รฅ skrive inn navnet pรฅ en funksjon og bruke den sammen med riktig syntaks. Printf, scanf er eksemplene pรฅ en bibliotekfunksjon.

Mens en brukerdefinert funksjon er en type funksjon der vi mรฅ skrive en hoveddel av en funksjon og kalle funksjonen hver gang vi krever at funksjonen skal utfรธre en operasjon i programmet vรฅrt.

En brukerdefinert funksjon i C skrives alltid av brukeren, men senere kan den vรฆre en del av 'C'-biblioteket. Det er en stor fordel med 'C'-programmering.

C programmeringsfunksjoner er delt inn i tre aktiviteter som,

  1. Funksjonserklรฆring
  2. Funksjonsdefinisjon
  3. Funksjonsanrop

Funksjonserklรฆring

Funksjonserklรฆring betyr รฅ skrive et navn pรฅ et program. Det er en obligatorisk del for bruk av funksjoner i kode. I en funksjonserklรฆring spesifiserer vi bare navnet pรฅ en funksjon som vi skal bruke i programmet vรฅrt som en variabeldeklarasjon. Vi kan ikke bruke en funksjon med mindre den er deklarert i et program. En funksjonserklรฆring kalles ogsรฅ ยซFunksjon prototypeยป.

Funksjonserklรฆringene (kalt prototype) gjรธres vanligvis over hovedfunksjonen () og har den generelle formen:

return_data_type function_name (data_type arguments);
  • Ocuco return_data_type: er datatypen til verdifunksjonen som returneres tilbake til kallesetningen.
  • Ocuco funksjonsnavn: etterfรธlges av parenteser
  • argumenter navn med deres datatypedeklarasjoner er valgfritt plassert innenfor parentes.

Vi vurderer fรธlgende program som viser hvordan man erklรฆrer en kubefunksjon for รฅ beregne kubeverdien til en heltallsvariabel

#include <stdio.h>
/*Function declaration*/
int add(int a,b);
/*End of Function declaration*/
int main() {

Husk at en funksjon ikke nรธdvendigvis returnerer en verdi. I dette tilfellet brukes nรธkkelordet void.

For eksempel indikerer funksjonserklรฆringen output_message at funksjonen ikke returnerer en verdi: void output_message();

Funksjonsdefinisjon

Funksjonsdefinisjon betyr bare รฅ skrive kroppen til en funksjon. En kropp av en funksjon bestรฅr av utsagn som skal utfรธre en spesifikk oppgave. En funksjonskropp bestรฅr av en enkelt eller en blokk med setninger. Det er ogsรฅ en obligatorisk del av en funksjon.

int add(int a,int b)	//function body	
{
	int c;
	c=a+b;
	return c;
}

Funksjonsanrop

Et funksjonskall betyr รฅ kalle en funksjon nรฅr det er nรธdvendig i et program. Hver gang vi kaller en funksjon, utfรธrer den en operasjon som den er designet for. Et funksjonskall er en valgfri del av et program.

  result = add(4,5);

Her er den komplette koden:

#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;
}

Utgang:

Addition:30

Funksjonsargumenter

En funksjons argumenter brukes til รฅ motta de nรธdvendige verdiene ved funksjonskallet. De matches etter posisjon; det fรธrste argumentet sendes til den fรธrste parameteren, det andre til den andre parameteren og sรฅ videre.

Som standard argumentene sendes etter verdi der en kopi av data gis til den kalte funksjonen. Den faktisk bestรฅtte variabelen vil ikke endres.

Vi vurderer fรธlgende program som demonstrerer parametere som sendes av verdi:

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);}

Programutgangen er:

5 + 10 = 15

Husk at verdiene til a og b ble sendt for รฅ legge til funksjon ikke ble endret fordi bare verdien ble sendt inn i parameteren x.

Variabelt omfang

Variabelt omfang betyr synligheten av variabler i en kode i programmet.

I C er variabler som er deklarert inne i en funksjon lokale for den kodeblokken og kan ikke refereres til utenfor funksjonen. Imidlertid er variabler som er deklarert utenfor alle funksjoner globale og tilgjengelige fra hele programmet. Konstanter erklรฆrt med en #definere รธverst i et program er tilgjengelig fra hele programmet. Vi vurderer fรธlgende program som skriver ut verdien av den globale variabelen fra bรฅde hoved- og brukerdefinerte funksjoner:

#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);}

Resultat:

from the main function : global =1348
from user defined function : global =1348

Vi diskuterer programdetaljer:

Variabelt omfang

  1. Vi erklรฆrer en global heltallsvariabel med 1348 som startverdi.
  2. Vi erklรฆrer og definerer en test()-funksjon som verken tar argumenter eller returnerer en verdi. Denne funksjonen skriver bare ut den globale variabelverdien for รฅ demonstrere at de globale variablene kan nรฅs hvor som helst i programmet.
  3. Vi skriver ut den globale variabelen i hovedfunksjonen.
  4. Vi kaller testfunksjonen for รฅ skrive ut den globale variabelverdien.

I C, nรฅr argumenter sendes til funksjonsparametere, fungerer parameterne som lokale variabler som vil bli รธdelagt nรฅr funksjonen avsluttes.

Nรฅr du bruker globale variabler, bruk dem med forsiktighet fordi de kan fรธre til feil og de kan endres hvor som helst i et program. De bรธr initialiseres fรธr bruk.

Statiske variabler

De statiske variablene har et lokalt omfang. De blir imidlertid ikke รธdelagt nรฅr du gรฅr ut av funksjonen. Derfor beholder en statisk variabel sin verdi for alltid og kan nรฅs nรฅr funksjonen legges inn pรฅ nytt. En statisk variabel initialiseres nรฅr den er deklarert og trenger prefikset static.

Fรธlgende program bruker en statisk variabel:

#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 ++; }

Programmet viser:

Hi number 1
Hi number 2
Hi number 3
Hi number 4
Hi number 5

Rekursive funksjoner

Tenk pรฅ faktoren til et tall som beregnes som fรธlger 6! =6* 5 * 4 * 3 * 2 * 1.

Denne beregningen gjรธres som gjentatte beregninger av fakta * (fakta -1) til fakta er lik 1.

En rekursiv funksjon er en funksjon som kaller seg selv og inkluderer en utgangsbetingelse for รฅ fullfรธre de rekursive anropene. Nรฅr det gjelder beregningen av faktortall, er utgangsbetingelsen faktum lik 1. Rekursjon fungerer ved รฅ "stable" anrop til utgangsbetingelsen er sann.

For eksempel:

#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));
}

Programmet viser:

 The factorial of 6 is 720

Her diskuterer vi programdetaljer:

Rekursive funksjoner

  1. Vi erklรฆrer vรฅr rekursive faktorielle funksjon som tar en heltallsparameter og returnerer faktorialen til denne parameteren. Denne funksjonen vil kalle seg selv og redusere tallet til den avslutter, eller grunntilstanden er nรฅdd. Nรฅr betingelsen er sann, vil de tidligere genererte verdiene multipliseres med hverandre, og den endelige faktorverdien returneres.
  2. Vi erklรฆrer og initialiserer en heltallsvariabel med verdi "6" og skriver deretter ut faktorverdien ved รฅ kalle vรฅr faktorielle funksjon.

Se pรฅ fรธlgende diagram for รฅ forstรฅ den rekursive mekanismen bedre, som bestรฅr av รฅ kalle funksjonen selv inntil basistilfellet eller stoppet.ping betingelsen er nรฅdd, og deretter samler vi inn de foregรฅende verdiene:

Rekursive funksjoner

Innebygde funksjoner

Funksjon i C-programmering brukes til รฅ lagre de mest brukte instruksjonene. Den brukes til รฅ modularisere programmet.

Hver gang en funksjon kalles, hopper instruksjonspekeren til funksjonsdefinisjonen. Etter รฅ ha utfรธrt en funksjon, faller instruksjonspekeren tilbake til setningen der den hoppet til funksjonsdefinisjonen.

Nรฅr vi bruker funksjoner, trenger vi en ekstra pekeren head for รฅ hoppe til funksjonsdefinisjonen og gรฅ tilbake til setningen. For รฅ eliminere behovet for slike pekerhoder, bruker vi innebygde funksjoner.

I en innebygd funksjon erstattes et funksjonskall direkte med en faktisk programkode. Den hopper ikke til noen blokk fordi alle operasjonene utfรธres inne i den innebygde funksjonen.

Inline-funksjoner brukes mest for smรฅ beregninger. De er ikke egnet nรฅr store databehandlinger er involvert.

En innebygd funksjon er lik den vanlige funksjonen, bortsett fra at nรธkkelordet innebygd er plassert foran funksjonsnavnet. Innebygde funksjoner opprettes med fรธlgende syntaks:

inline function_name ()
{
    //function definition
}

La oss skrive et program for รฅ implementere en innebygd funksjon.

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();
}

Utgang:

Addition: 30

Programmet ovenfor viser bruken av en innebygd funksjon for addisjon av to tall. Som vi kan se, har vi returnert tillegget pรฅ to tall i den innebygde funksjonen uten รฅ skrive noen ekstra linjer. Under funksjonsanrop har vi nettopp sendt verdier som vi mรฅ utfรธre addisjon pรฅ.

Sammendrag

  • En funksjon er et miniprogram eller et underprogram.
  • Funksjoner brukes til รฅ modularisere programmet.
  • Bibliotek og brukerdefinert er to typer funksjoner.
  • En funksjon bestรฅr av en erklรฆring, funksjonstekst og en funksjonsanropsdel.
  • Funksjonserklรฆring og organ er obligatorisk.
  • Et funksjonskall kan vรฆre valgfritt i et program.
  • C-programmet har minst รฉn funksjon; det er hovedfunksjonen ().
  • Hver funksjon har et navn, datatype for returverdi eller en tomrom, parametere.
  • Hver funksjon mรฅ defineres og deklareres i ditt C-program.
  • Husk at vanlige variabler i en C-funksjon blir รธdelagt sรฅ snart vi gรฅr ut av funksjonskallet.
  • Argumentene som sendes til en funksjon vil ikke bli endret fordi de ble sendt med verdi ingen etter adresse.
  • Variabelomfanget omtales som synligheten til variabler i et program
  • Det er globale og lokale variabler i C programmering

Oppsummer dette innlegget med: