logo

FUNKSJONSPROTOTYPE I C

Introduksjon:

I C-programmering, a funksjonsprototype brukes til å erklære signatur av en funksjon, som inkluderer dens navn, returtype , og parametere . Funksjonsprototyper er viktige fordi de informerer kompilatoren om funksjonens grensesnitt før den kalles, noe som gir mulighet for riktig typekontroll og feilhåndtering. I denne artikkelen vil vi diskutere viktigheten av funksjonsprototyper i C-programmering og hvordan de brukes.

Hvorfor bruke funksjonsprototyper?

Funksjonsprototyper er viktige i C-programmering av flere grunner. En av de viktigste grunnene er at de tillater kompilator for å se etter feil før programmet faktisk kjøres. Hvis en funksjon kalles med feil antall eller type argumenter, vil kompilatoren generere en feilmelding , og forhindrer at programmet krasjer eller oppfører seg uventet under kjøring.

En annen viktig grunn til å bruke funksjonsprototyper er å muliggjøre modulær programmering. I C er funksjoner typisk definert i separate filer fra hovedprogrammet, og kobles sammen på kompileringstidspunktet. Ved å deklarere funksjonsprototyper i header-filer som er inkludert i både hovedprogrammet og funksjonsdefinisjonsfilene, kan funksjonen kalles opp fra hvilken som helst del av programmet uten å kreve tilgang til funksjonens implementeringsdetaljer.

Funksjonsprototyper også gjøre det lettere å lese og forstå koden. Ved å inkludere funksjonens signatur i kildekoden, kan andre utviklere enkelt se hva funksjonen gjør, argumentene og returtypen. Det gjør koden mer selvdokumenterende og reduserer sannsynligheten for feil forårsaket av misforståelser eller feiltolkninger av koden.

annet hvis bash

Syntaks for funksjonsprototype:

Syntaksen til en funksjonsprototype i C-programmering er som følger:

 return_type function_name(parameter_list); 

De returtype er datatypen som funksjonen returnerer , som for eksempel int, flyte , eller røye . De funksjonsnavn er navnet på funksjon , og parameter_list er en kommadelt liste over parametere som funksjonen tar. Hver parameter i parameter_list består av en datatype etterfulgt av parameternavn .

Følgende er for eksempel en funksjonsprototype for en funksjon som krever to heltall som argumenter og returnerer summen deres:

 int add(int num1, int num2); 

I dette eksemplet er returtypen int , er funksjonsnavnet Legg til , og parameterlisten består av to navngitte heltall nummer1 og nummer2 .

Standard funksjonsprototyper:

I C-programmering, hvis en funksjon kalles før den er det definert eller erklært , vil kompilatoren anta en standard funksjonsprototype. De standard funksjonsprototype antar at funksjonen returnerer en int og tar et hvilket som helst antall argumenter av enhver type.

Tenk for eksempel på følgende kode:

 #include int main() { printf('The sum is %d
', add(2, 3)); return 0; } int add(int num1, int num2) { return num1 + num2; } 

Produksjon:

 The sum is 5 

Forklaring:

I denne koden er legge til funksjon kalles før den er erklært eller definert . Men fordi kompilatoren antar en standard funksjonsprototype, kompilerer programmet uten feil og produserer riktig utgang.

Selv om standard funksjonsprototyper noen ganger er praktiske, anbefales de vanligvis ikke fordi de kan føre til subtile feil og feil. Det er beste praksis å deklarere funksjonsprototyper eksplisitt for å unngå potensielle problemer.

Funksjonsprototyper og overskriftsfiler:

I C-programmering, funksjonsprototyper er ofte inkludert i header-filer, som da er inkludert i både hovedprogrammet og funksjonsdefinisjonsfilene. Den lar funksjoner kalles fra hvilken som helst programdel uten å kreve tilgang til funksjonens implementeringsdetaljer.

Header-filer har vanligvis en .h utvidelse , og inkluderer kun funksjonsprototyper , type definisjoner , og annen erklæringer som trengs av hovedprogrammet eller andre filer. Her er et eksempel på en header-fil som erklærer add-funksjonen fra tidligere:

 #ifndef ADD_H #define ADD_H int add(int num1, int num2) 

I dette eksemplet er ifndef direktiv sjekker om ADD_H er allerede definert. Hvis den ikke har det, definerer den ADD_H og fortsetter med å inkludere funksjonsprototypen for add.

De definere direktiv skaper en makro navngitt ADD_H , som kan brukes til å sikre at overskriftsfilen bare inkluderes én gang i hver fil. Det er viktig å forhindre flere deklarasjoner av samme funksjon, noe som kan forårsake feil. De funksjonsprototype for add erklærer ganske enkelt at funksjonen tar to heltall som argumenter og returnerer et heltall. Det er nok informasjon til at hovedprogrammet og andre filer kan kalle add-funksjonen riktig uten å vite hvordan den implementeres.

Når en header-fil er inkludert i en C-program , den forprosessor erstatter #inkludere direktiv med innholdet i header-fil . Den lar hovedprogrammet og andre filer få tilgang til funksjonsprototypene og andre erklæringer i overskriftsfilen.

Noen viktige punkter i funksjonsprototypen i C:

Funksjonsprototyper hjelper til med å fange opp feil:

Når en funksjonsprototype er inkludert i et C-program, kontrollerer kompilatoren at funksjonen brukes riktig før programmet kjøres. Det hjelper å fange opp feil tidlig før programmet kjøres.

Funksjonsprototyper er avgjørende i store programmer:

git status -s

I store programmer er det viktig å skille bekymringer mellom ulike funksjoner tydelig. Funksjonsprototyper muliggjør denne separasjonen ved å la hver funksjon utvikles uavhengig uten å kjenne implementeringsdetaljene til andre funksjoner.

Funksjonsprototyper kan deklareres i overskriftsfiler:

Som nevnt tidligere er funksjonsprototyper vanligvis deklarert i overskriftsfiler. Header-filer er da inkludert i både hovedprogrammet og funksjonsdefinisjonsfilene, noe som gjør funksjonene tilgjengelige fra alle deler av programmet.

Funksjonsprototyper kan overbelastes:

C støtter ikke funksjonsoverbelastning som noen andre programmeringsspråk, men funksjonsprototyper kan overbelastes ved å bruke forskjellige argumenttyper og tall. Det gjør det mulig å bruke samme funksjonsnavn til forskjellige formål.

Funksjonsprototyper kan inkludere standard argumentverdier:

C støtter ikke standard argumentverdier som noen andre programmeringsspråk, men funksjonsprototyper kan inkludere valgfrie argumenter ved å bruke en spesiell syntaks. Den gjør det mulig å bruke den samme funksjonen med eller uten visse argumenter.

Funksjonsprototyper kan deklareres fremover:

I noen tilfeller kan det være nødvendig å deklarere en funksjonsprototype før implementeringen er tilgjengelig. Det kalles videresende erklæring og kan være nyttig i komplekse programmer der implementeringen av en funksjon kanskje ikke er kjent på tidspunktet for erklæringen.

Her er noen flere eksempler på funksjonsprototyper i C-programmering:

Eksempel 1:

 #include float calculate_average(int arr[], int size); int main() { int arr[] = {1, 2, 3, 4, 5}; int size = 5; float average = calculate_average(arr, size); printf(&apos;The average is: %.2f&apos;, average); return 0; } float calculate_average(int arr[], int size) { float sum = 0.0; for (int i = 0; i<size; i++) { sum +="arr[i];" } return size; < pre> <p> <strong>Output:</strong> </p> <pre> The average is: 3.00 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first declare the <strong> <em>calculate_average</em> </strong> function prototype at the beginning of our program before the main function. After that, inside the main function, we declare an integer array <strong> <em>arr</em> </strong> with some values and a size of <strong> <em>5</em> </strong> . After that, we call the <strong> <em>calculate_average function</em> </strong> , passing in the <strong> <em>arr array</em> </strong> and its size, and store the result in a <strong> <em>float variable</em> </strong> named <strong> <em>average</em> </strong> . Finally, we print out the result using printf.</p> <p>The <strong> <em>calculate_average</em> </strong> function takes in the integer <strong> <em>array arr</em> </strong> and its size as arguments and returns the average value of the array as a <strong> <em>float</em> </strong> . We first declare a float variable named <strong> <em>sum</em> </strong> inside the function and initialize it to <strong> <em>0.0</em> </strong> . After that, we loop through each element in the array using a <strong> <em>for loop</em> </strong> , adding each element to the sum variable. Finally, we return the result of dividing the sum variable by the array size.</p> <p>Its average is <strong> <em>3.00</em> </strong> because the <strong> <em>arr</em> </strong> array contains the values <strong> <em>{1, 2, 3, 4, 5}</em> </strong> , and the average of these values is <strong> <em>(1+2+3+4+5)/5 = 3.00</em> </strong> . The <strong> <em>printf</em> </strong> statement in the main function uses the <strong> <em>%f format specifier</em> </strong> to print out the average value as a floating-point number. The <strong> <em>.2 modifier</em> </strong> specifies that we want to print only two decimal places.</p> <p> <strong>Example 2:</strong> </p> <pre> #include void print_message(char *msg); int main() { char *msg = &apos;Hello, world!&apos;; print_message(msg); return 0; } void print_message(char *msg) { printf(&apos;%s
&apos;, msg); } </pre> <p> <strong>Output:</strong> </p> <pre> Hello, world! </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first declare the <strong> <em>print_message</em> </strong> function prototype at the beginning of our program, before the main function. Then, inside the main function, we declare a character pointer <strong> <em>msg</em> </strong> and initialize it to point to a string literal <strong> <em>&apos;Hello, world!&apos;</em> </strong> . After that, we call the <strong> <em>print_message</em> </strong> function, passing in the <strong> <em>msg pointer</em> </strong> .</p> <p>The <strong> <em>print_message</em> </strong> function takes in a character pointer <strong> <em>msg</em> </strong> as an argument, and returns nothing <strong> <em>(void)</em> </strong> . Inside the function, we use the <strong> <em>printf function</em> </strong> to print out the string pointed to by <strong> <em>msg</em> </strong> , followed by a <strong> <em>newline character (
)</em> </strong> . The <strong> <em>%s</em> </strong> format specifier is used to print out a string.</p> <p>The Output is <strong> <em>Hello, world!</em> </strong> . Because the <strong> <em>print_message</em> </strong> function prints out the string pointed to by the <strong> <em>msg pointer</em> </strong> , which in this case is <strong> <em>&apos;Hello, world!&apos;</em> </strong> , followed by a newline character.</p> <p> <strong>Example 3:</strong> </p> <pre> #include int factorial(int n); int main() { int n = 5; int result = factorial(n); printf(&apos;%d! = %d
&apos;, n, result); return 0; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n-1); } } </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first declare the <strong> <em>factorial function</em> </strong> prototype at the beginning of our program, before the main function. Then, inside the main function, we declare an integer variable <strong> <em>n</em> </strong> and initialize it to <strong> <em>5</em> </strong> . After that, we call the factorial function, passing in <strong> <em>n</em> </strong> , and store the result in an integer variable named <strong> <em>result</em> </strong> . Finally, we print out the result using <strong> <em>printf</em> </strong> .</p> <p>The factorial function takes in an integer <strong> <em>n</em> </strong> as an argument, and returns its factorial as an <strong> <em>integer</em> </strong> . Inside the function, we first check if <strong> <em>n</em> </strong> is equal to <strong> <em>0</em> </strong> . If it is, we return <strong> <em>1</em> </strong> , since <strong> <em>0! = 1</em> </strong> by definition. Otherwise, we return <strong> <em>n * factorial(n-1)</em> </strong> , which is the factorial of <strong> <em>n</em> </strong> calculated recursively as the product of <strong> <em>n</em> </strong> and the factorial of <strong> <em>n-1</em> </strong> .</p> <p>The output of the code will be:</p> <pre> 5! = 120 </pre> <p>This is because the <strong> <em>factorial function</em> </strong> calculates <strong> <em>5!</em> </strong> as <strong> <em>5 * 4 * 3 * 2 * 1 = 120</em> </strong> , and this result is printed out using <strong> <em>printf</em> </strong> .</p> <p> <strong>Example 4:</strong> </p> <pre> #include int find_max(int arr[], int size); int main() { int arr[] = {3, 5, 2, 8, 1}; int size = sizeof(arr) / sizeof(int); int max = find_max(arr, size); printf(&apos;The maximum value in the array is: %d
&apos;, max); return 0; } int find_max(int arr[], int size) { int max = arr[0]; for (int i = 1; i max) { max = arr[i]; } } return max; } </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first declare the <strong> <em>find_max</em> </strong> function prototype at the beginning of our program, before the main function. Then, inside the main function, we declare an integer <strong> <em>array arr</em> </strong> and initialize it with some values, and a variable size that stores the size of the array. After that, we call the <strong> <em>find_max function</em> </strong> , passing in the <strong> <em>arr array</em> </strong> and <strong> <em>size</em> </strong> , and store the result in an integer variable named <strong> <em>max</em> </strong> . Finally, we print out the result using <strong> <em>printf</em> </strong> .</p> <p>The <strong> <em>find_max function</em> </strong> takes in an integer array <strong> <em>arr</em> </strong> and its size <strong> <em>size</em> </strong> as arguments, and returns the maximum value in the array as an integer. Inside the function, we first initialize a variable max with the first element of the array arr. After that, we loop over the remaining elements of the array using a for loop, comparing each element to the current maximum value using an if statement. If the current element is greater than the current maximum, we update max to the value of the current element. After the loop finishes, we return the final value of max.</p> <p>The <strong> <em>output</em> </strong> of the code will be:</p> <pre> The maximum value in the array is: 8 </pre> <p>This is because the <strong> <em>find_max</em> </strong> function searches through the array <strong> <em>{3, 5, 2, 8, 1}</em> </strong> and finds that the maximum value is <strong> <em>8</em> </strong> , which is then printed out using <strong> <em>printf</em> </strong> .</p> <p>Overall, function prototypes are an essential part of C programming that allow for <strong> <em>modular programming</em> , <em>type checking</em> , <em>error handling</em> </strong> , and <strong> <em>self-documenting code</em> </strong> . By declaring function prototypes, developers can write more robust, maintainable, and error-free code.</p> <p> <strong>Example 5:</strong> </p> <pre> #include void greet_user(char *name); int main() { char name[50]; printf(&apos;What is your name? &apos;); scanf(&apos;%s&apos;, name); greet_user(name); return 0; } void greet_user(char *name) { printf(&apos;Hello, %s! Nice to meet you.
&apos;, name); } </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, we first declare the <strong> <em>greet_user function</em> </strong> prototype at the beginning of our program, before the main function. Then, inside the main function, we declare a character array name with a size of <strong> <em>50</em> </strong> , and use <strong> <em>printf</em> </strong> and <strong> <em>scanf</em> </strong> to ask the user for their name and read it into the name array. After that, we call the <strong> <em>greet_user function</em> </strong> , passing in the name array as an argument.</p> <p>The <strong> <em>greet_user function</em> </strong> takes in a character pointer name as an argument, which is a pointer to the first character of a string. Inside the function, we use <strong> <em>printf</em> </strong> to print out a greeting message that includes the user&apos;s name, and a friendly message.</p> <p>The output of the code will depend on the user&apos;s input. Here&apos;s an example of what the output might look like:</p> <pre> What is your name? suman Hello, suman! Nice to meet you. </pre> <p>In this case, the user enters the name <strong> <em>&apos;suman&apos;</em> </strong> , and the program prints out a greeting message that includes their name.</p> <h2>Conclusion:</h2> <p> <strong> <em>Function prototypes</em> </strong> are an important part of C programming, enabling modular programming, error checking, and self-documenting code. By declaring the signature of a function before it is called, function prototypes allow the compiler to check for errors, enable modular programming, and make code easier to read and understand.</p> <p>In C programming, function prototypes are typically included in <strong> <em>header files</em> </strong> , which are then included in both the main program and the function definition files. It allows functions to be called from any part of the program without requiring access to the function&apos;s implementation details. By understanding the importance of function prototypes and how they are used in C programming, developers can write more robust, maintainable, and error-free code.</p> <hr></size;>

Forklaring:

I dette eksemplet erklærer vi først beregne_gjennomsnitt funksjonsprototype i begynnelsen av programmet vårt før hovedfunksjonen. Etter det, inne i hovedfunksjonen, erklærer vi en heltallsmatrise arr med noen verdier og en størrelse på 5 . Etter det ringer vi calculate_average funksjon , passerer i arr array og dens størrelse, og lagre resultatet i en flyte variabel navngitt gjennomsnitt . Til slutt skriver vi ut resultatet ved hjelp av printf.

De beregne_gjennomsnitt funksjonen tar inn hele tallet array arr og dens størrelse som argumenter og returnerer den gjennomsnittlige verdien av matrisen som en flyte . Vi erklærer først en flytvariabel kalt sum inne i funksjonen og initialiser den til 0,0 . Etter det går vi gjennom hvert element i matrisen ved å bruke en for løkke , legger hvert element til sumvariabelen. Til slutt returnerer vi resultatet av å dele sumvariabelen med matrisestørrelsen.

Dens gjennomsnitt er 3.00 fordi det arr array inneholder verdiene {1, 2, 3, 4, 5} , og gjennomsnittet av disse verdiene er (1+2+3+4+5)/5 = 3,00 . De printf setningen i hovedfunksjonen bruker %f formatspesifikasjoner for å skrive ut gjennomsnittsverdien som et flyttall. De .2 modifikator spesifiserer at vi ønsker å skrive ut kun to desimaler.

Eksempel 2:

 #include void print_message(char *msg); int main() { char *msg = &apos;Hello, world!&apos;; print_message(msg); return 0; } void print_message(char *msg) { printf(&apos;%s
&apos;, msg); } 

Produksjon:

 Hello, world! 

Forklaring:

hvordan sortere en arraylist i java

I dette eksemplet erklærer vi først print_message funksjonsprototype i begynnelsen av programmet vårt, før hovedfunksjonen. Deretter, inne i hovedfunksjonen, erklærer vi en tegnpeker melding og initialiser den for å peke på en streng bokstavelig 'Hei Verden!' . Etter det ringer vi print_message funksjon, passerer i meldingspeker .

De print_message funksjonen tar inn en tegnpeker melding som et argument, og returnerer ingenting (tomrom) . Inne i funksjonen bruker vi printf funksjon for å skrive ut strengen pekt på melding , etterfulgt av en nylinjetegn ( ) . De %s formatspesifikasjoner brukes til å skrive ut en streng.

Utgangen er Hei Verden! . Fordi det print_message funksjonen skriver ut strengen pekt på av meldingspeker , som i dette tilfellet er 'Hei Verden!' , etterfulgt av et linjeskifttegn.

Eksempel 3:

 #include int factorial(int n); int main() { int n = 5; int result = factorial(n); printf(&apos;%d! = %d
&apos;, n, result); return 0; } int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n-1); } } 

Forklaring:

I dette eksemplet erklærer vi først faktoriell funksjon prototype i begynnelsen av programmet vårt, før hovedfunksjonen. Deretter, inne i hovedfunksjonen, erklærer vi en heltallsvariabel n og initialisere den til 5 . Etter det kaller vi den faktorielle funksjonen, passerer inn n , og lagre resultatet i en heltallsvariabel med navn resultat . Til slutt skriver vi ut resultatet vha printf .

Faktorialfunksjonen tar inn et heltall n som et argument, og returnerer sin faktor som en heltall . Inne i funksjonen sjekker vi først om n er lik 0 . Hvis det er det, kommer vi tilbake 1 , siden 0! = 1 per definisjon. Ellers kommer vi tilbake n * faktoriell(n-1) , som er faktoren til n beregnet rekursivt som produktet av n og faktoren til n-1 .

Utgangen av koden vil være:

dekode base64 javascript
 5! = 120 

Dette er fordi faktoriell funksjon beregner 5! som 5 * 4 * 3 * 2 * 1 = 120 , og dette resultatet skrives ut ved hjelp av printf .

Eksempel 4:

 #include int find_max(int arr[], int size); int main() { int arr[] = {3, 5, 2, 8, 1}; int size = sizeof(arr) / sizeof(int); int max = find_max(arr, size); printf(&apos;The maximum value in the array is: %d
&apos;, max); return 0; } int find_max(int arr[], int size) { int max = arr[0]; for (int i = 1; i max) { max = arr[i]; } } return max; } 

Forklaring:

I dette eksemplet erklærer vi først finn_maks funksjonsprototype i begynnelsen av programmet vårt, før hovedfunksjonen. Deretter, inne i hovedfunksjonen, erklærer vi et heltall array arr og initialiser den med noen verdier, og en variabel størrelse som lagrer størrelsen på matrisen. Etter det ringer vi funn_max funksjon , passerer i arr array og størrelse , og lagre resultatet i en heltallsvariabel med navn maks . Til slutt skriver vi ut resultatet vha printf .

De funn_max funksjon tar inn en heltallsmatrise arr og dens størrelse størrelse som argumenter, og returnerer maksimalverdien i matrisen som et heltall. Inne i funksjonen initialiserer vi først en variabel max med det første elementet i matrisen arr. Deretter går vi over de gjenværende elementene i matrisen ved å bruke en for-løkke, og sammenligner hvert element med gjeldende maksimalverdi ved å bruke en if-setning. Hvis gjeldende element er større enn gjeldende maksimum, oppdaterer vi maks til verdien av gjeldende element. Etter at løkken er ferdig, returnerer vi den endelige verdien på maks.

De produksjon av koden vil være:

 The maximum value in the array is: 8 

Dette er fordi finn_maks funksjonen søker gjennom matrisen {3, 5, 2, 8, 1} og finner at maksimumsverdien er 8 , som deretter skrives ut vha printf .

Samlet sett er funksjonsprototyper en viktig del av C-programmering som tillater modulær programmering , typekontroll , feilhåndtering , og selvdokumenterende kode . Ved å deklarere funksjonsprototyper kan utviklere skrive mer robust, vedlikeholdbar og feilfri kode.

Eksempel 5:

 #include void greet_user(char *name); int main() { char name[50]; printf(&apos;What is your name? &apos;); scanf(&apos;%s&apos;, name); greet_user(name); return 0; } void greet_user(char *name) { printf(&apos;Hello, %s! Nice to meet you.
&apos;, name); } 

Forklaring:

I dette eksemplet erklærer vi først greet_user funksjon prototype i begynnelsen av programmet vårt, før hovedfunksjonen. Deretter, inne i hovedfunksjonen, erklærer vi et tegnarraynavn med størrelsen på femti , og bruk printf og scanf for å spørre brukeren om navnet sitt og lese det inn i navnefeltet. Etter det ringer vi greet_user funksjon , ved å sende inn navnematrisen som et argument.

De greet_user funksjon tar inn et tegnpekernavn som et argument, som er en peker til det første tegnet i en streng. Inne i funksjonen bruker vi printf å skrive ut en hilsen som inneholder brukerens navn, og en vennlig melding.

Utdataene til koden vil avhenge av brukerens input. Her er et eksempel på hvordan utgangen kan se ut:

 What is your name? suman Hello, suman! Nice to meet you. 

I dette tilfellet skriver brukeren inn navnet 'sumam' , og programmet skriver ut en hilsen som inkluderer navnet deres.

Konklusjon:

Funksjonsprototyper er en viktig del av C-programmering, som muliggjør modulær programmering, feilkontroll og selvdokumenterende kode. Ved å erklære signaturen til en funksjon før den kalles, lar funksjonsprototyper kompilatoren se etter feil, aktivere modulær programmering og gjøre koden lettere å lese og forstå.

I C-programmering er funksjonsprototyper vanligvis inkludert i header-filer , som da er inkludert i både hovedprogrammet og funksjonsdefinisjonsfilene. Den lar funksjoner kalles fra hvilken som helst del av programmet uten å kreve tilgang til funksjonens implementeringsdetaljer. Ved å forstå viktigheten av funksjonsprototyper og hvordan de brukes i C-programmering, kan utviklere skrive mer robust, vedlikeholdbar og feilfri kode.