logo

PROTOTIP FUNKCIJE V C

Uvod:

Pri programiranju C, a prototip funkcije se uporablja za razglasitev podpis funkcije, ki vključuje njeno ime, povratni tip , in parametri . Prototipi funkcij so pomembni, ker obvestijo prevajalnik o vmesniku funkcije, preden jo pokličejo, kar omogoča pravilno preverjanje tipa in obravnavanje napak. V tem članku bomo razpravljali o pomenu prototipov funkcij v programiranju C in o tem, kako se uporabljajo.

Zakaj uporabljati prototipe funkcij?

Funkcijski prototipi so pomembni pri programiranju C iz več razlogov. Eden najpomembnejših razlogov je, da omogočajo prevajalnik za preverjanje napak, preden se program dejansko izvede. Če je funkcija poklicana z napačnim številom ali vrsto argumentov, bo prevajalnik ustvaril obvestilo o napaki , ki preprečuje, da bi se program med izvajanjem zrušil ali nepričakovano obnašal.

Drug pomemben razlog za uporabo prototipov funkcij je omogočanje modularnega programiranja. V C so funkcije običajno definirane v datotekah, ki so ločene od glavnega programa in so med seboj povezane med prevajanjem. Z deklaracijo prototipov funkcij v datotekah glave, ki so vključene tako v glavnem programu kot v datotekah z definicijo funkcij, lahko funkcijo pokličete iz katerega koli dela programa, ne da bi zahtevali dostop do podrobnosti o izvedbi funkcije.

Funkcijski prototipi prav tako olajšajo branje in razumevanje kode. Z vključitvijo podpisa funkcije v izvorno kodo lahko drugi razvijalci preprosto vidijo, kaj funkcija počne, njene argumente in vrsto vrnitve. Zaradi tega je koda bolj samodokumentirana in zmanjša verjetnost napak, ki jih povzročajo nesporazumi ali napačne interpretacije kode.

razvrščanje na seznamu v Javi

Sintaksa prototipa funkcije:

Sintaksa prototipa funkcije v programiranju C je naslednja:

 return_type function_name(parameter_list); 

The return_type je podatkovni tip, ki ga funkcija vrne , kot naprimer int, float , oz char . The ime_funkcije je ime funkcijo , in seznam_parametrov je z vejicami ločen seznam parametri ki jo funkcija zavzame. Vsak parameter v seznam_parametrov je sestavljen iz podatkovnega tipa, ki mu sledi ime parametra .

Sledi na primer prototip funkcije za funkcijo, ki potrebuje dva cela števila kot argumente in vrne njihovo vsoto:

 int add(int num1, int num2); 

V tem primeru je povratna vrsta int , ime funkcije je dodati , seznam parametrov pa je sestavljen iz dveh celih števil z imenom št.1 in št.2 .

Privzeti prototipi funkcij:

V programiranju C, če je funkcija poklicana pred njo definiran oz razglašeno , bo prevajalnik prevzel privzeti prototip funkcije. The prototip privzete funkcije predpostavlja, da funkcija vrne an int in sprejme poljubno število argumentov katere koli vrste.

Na primer, razmislite o naslednji kodi:

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

Izhod:

 The sum is 5 

Pojasnilo:

V tej kodi je dodaj funkcijo je poklican, preden je razglašeno oz definiran . Ker pa prevajalnik prevzame privzeti prototip funkcije, program prevede brez napaka in ustvari pravilen rezultat.

Čeprav so prototipi privzetih funkcij včasih priročni, jih na splošno ne priporočamo, ker lahko povzročijo subtilne hrošče in napake. Najboljša praksa je, da prototipe funkcij izrecno deklarirate, da se izognete morebitnim težavam.

Prototipi funkcij in datoteke glave:

V programiranju C, prototipi funkcij so pogosto vključene v datoteke glave, ki so nato vključene tako v glavni program kot v datoteke z definicijo funkcij. Omogoča klic funkcij iz katerega koli dela programa, ne da bi zahteval dostop do podrobnosti izvedbe funkcije.

Glavne datoteke imajo običajno a .h razširitev , in vključujejo samo prototipi funkcij , definicije tipov , in druge izjave ki jih potrebuje glavni program ali druge datoteke. Tukaj je primer datoteke glave, ki deklarira prejšnjo funkcijo dodajanja:

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

V tem primeru je ifndef direktiva preverja, ali ADD_H je že definiran. Če ni, definira ADD_H in nadaljuje z vključitvijo prototipa funkcije za add.

The opredeliti direktiva ustvarja a makro imenovan ADD_H , s katerim lahko zagotovite, da je datoteka glave vključena samo enkrat v vsako datoteko. Pomembno je preprečiti večkratne deklaracije iste funkcije, ki lahko povzročijo napake. The prototip funkcije for add preprosto izjavi, da funkcija sprejme dve celi števili kot argumenta in vrne celo število. Za glavni program in druge datoteke je dovolj informacij, da pravilno pokličejo funkcijo dodajanja, ne da bi vedeli, kako je implementirana.

Ko je datoteka glave vključena v a C program , the predprocesor nadomešča #vključi direktivo z vsebino naslovna datoteka . Glavnemu programu in drugim datotekam omogoča dostop do prototipov funkcij in drugih deklaracij v datoteki glave.

Nekaj ​​pomembnih točk prototipa funkcije v C:

Prototipi funkcij pomagajo pri odkrivanju napak:

Ko a prototip funkcije je vključen v program C, prevajalnik pred zagonom programa preveri, ali je funkcija pravilno uporabljena. Pomaga pri odkrivanju napak zgodaj, preden se program izvede.

Prototipi funkcij so bistveni v velikih programih:

kamelji piton

Pri velikih programih je pomembno, da se zadeve med različnimi funkcijami jasno ločijo. Funkcijski prototipi omogočajo to ločevanje tako, da omogočajo neodvisen razvoj vsake funkcije brez poznavanja izvedbenih podrobnosti drugih funkcij.

Prototipe funkcij je mogoče deklarirati v datotekah glave:

Kot smo že omenili, so prototipi funkcij običajno deklarirani v datotekah glave. Datoteke glave so nato vključene tako v glavni program kot v datoteke z definicijo funkcij, zaradi česar so funkcije dostopne iz katerega koli dela programa.

Prototipe funkcij je mogoče preobremeniti:

C ne podpira preobremenitve funkcij kot nekateri drugi programski jeziki, vendar je mogoče prototipe funkcij preobremeniti z uporabo različnih vrst argumentov in števil. Omogoča uporabo istega imena funkcije za različne namene.

Prototipi funkcij lahko vključujejo privzete vrednosti argumentov:

C ne podpira privzetih vrednosti argumentov kot nekateri drugi programski jeziki, vendar lahko prototipi funkcij vključujejo neobvezne argumente z uporabo posebne sintakse. Omogoča uporabo iste funkcije z določenimi argumenti ali brez njih.

Prototipe funkcij je mogoče vnaprej deklarirati:

V nekaterih primerih bo morda treba deklarirati prototip funkcije, preden je na voljo njegova implementacija. Se imenuje posredna izjava in je lahko uporaben v kompleksnih programih, kjer izvajanje funkcije morda ni znano v času njene deklaracije.

Tukaj je še nekaj primerov prototipov funkcij v programiranju C:

Primer 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;>

Pojasnilo:

javascript trim

V tem primeru najprej deklariramo izračunaj_povprečje prototip funkcije na začetku našega programa pred glavno funkcijo. Nato znotraj glavne funkcije deklariramo celoštevilsko matriko prir z nekaj vrednostmi in velikostjo 5 . Po tem pokličemo funkcija izračuna_povprečje , ki poteka v niz arr in njegovo velikost ter shranite rezultat v a spremenljivka float imenovan povprečje . Na koncu natisnemo rezultat z uporabo printf.

The izračunaj_povprečje funkcija sprejme celo število niz arr in njegovo velikost kot argumente ter vrne povprečno vrednost matrike kot a lebdi . Najprej deklariramo plavajočo spremenljivko z imenom vsota znotraj funkcije in jo inicializirati na 0,0 . Nato preletimo vsak element v matriki z uporabo a za zanko , dodajanje vsakega elementa spremenljivki vsote. Na koncu vrnemo rezultat deljenja spremenljivke vsote z velikostjo matrike.

Njegovo povprečje je 3.00 zaradi prir niz vsebuje vrednosti {1, 2, 3, 4, 5} , povprečje teh vrednosti pa je (1+2+3+4+5)/5 = 3,00 . The printf stavek v glavni funkciji uporablja %f specifikator formata da natisnete povprečno vrednost kot število s plavajočo vejico. The .2 modifikator določa, da želimo natisniti le dve decimalni mesti.

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

Izhod:

 Hello, world! 

Pojasnilo:

V tem primeru najprej deklariramo print_message prototip funkcije na začetku našega programa, pred glavno funkcijo. Nato znotraj glavne funkcije deklariramo kazalec znakov sporočilo in ga inicializirati, da kaže na nizovni literal 'Pozdravljen, svet!' . Po tem pokličemo print_message funkcijo, ki poteka v kazalec sporočila .

The print_message funkcija sprejme kazalec znakov sporočilo kot argument in ne vrne ničesar (prazno) . Znotraj funkcije uporabljamo funkcija printf da natisnete niz, na katerega kaže sporočilo , ki mu sledi a znak nove vrstice ( ) . The %s specifikator formata se uporablja za izpis niza.

Izhod je Pozdravljen, svet! . Zaradi print_message funkcija natisne niz, na katerega kaže kazalec sporočila , ki je v tem primeru 'Pozdravljen, svet!' , ki mu sledi znak za novo vrstico.

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

Pojasnilo:

V tem primeru najprej deklariramo faktorska funkcija prototip na začetku našega programa, pred glavno funkcijo. Nato znotraj glavne funkcije deklariramo celoštevilsko spremenljivko n in ga inicializirati na 5 . Nato pokličemo faktorialno funkcijo, ki prehaja noter n in shranite rezultat v celoštevilsko spremenljivko z imenom rezultat . Na koncu izpišemo rezultat z uporabo printf .

Funkcija faktoriel sprejme celo število n kot argument in vrne svoj faktorial kot celo število . Znotraj funkcije najprej preverimo, če n je enako 0 . Če je, se vrnemo 1 , od 0! = 1 po definiciji. V nasprotnem primeru se vrnemo n * faktoriel (n-1) , ki je faktoriel n izračunano rekurzivno kot produkt n in faktoriel od n-1 .

Izhod kode bo:

zbirke v Javi
 5! = 120 

To je zato, ker faktorska funkcija izračuna 5! kot 5 * 4 * 3 * 2 * 1 = 120 , ta rezultat pa se natisne z uporabo printf .

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

Pojasnilo:

V tem primeru najprej deklariramo find_max prototip funkcije na začetku našega programa, pred glavno funkcijo. Nato znotraj glavne funkcije deklariramo celo število niz arr in ga inicializirati z nekaj vrednostmi ter velikostjo spremenljivke, ki shrani velikost matrike. Po tem pokličemo funkcijo find_max , ki poteka v niz arr in velikost in shranite rezultat v celoštevilsko spremenljivko z imenom maks . Na koncu izpišemo rezultat z uporabo printf .

The funkcijo find_max sprejme matriko celih števil prir in njegovo velikost velikost kot argumente in vrne največjo vrednost v matriki kot celo število. Znotraj funkcije najprej inicializiramo spremenljivko max s prvim elementom matrike arr. Po tem preletimo preostale elemente matrike z uporabo zanke for, pri čemer vsak element primerjamo s trenutno največjo vrednostjo z uporabo stavka if. Če je trenutni element večji od trenutnega maksimuma, posodobimo max na vrednost trenutnega elementa. Po končani zanki vrnemo končno vrednost max.

The izhod kode bo:

 The maximum value in the array is: 8 

To je zato, ker find_max funkcija išče po matriki {3, 5, 2, 8, 1} in ugotovi, da je največja vrednost 8 , ki se nato natisne z uporabo printf .

Na splošno so prototipi funkcij bistveni del programiranja C, ki omogočajo modularno programiranje , preverjanje tipa , obravnavanje napak , in kodo za samodokumentiranje . Z razglasitvijo prototipov funkcij lahko razvijalci napišejo bolj robustno kodo, ki jo je mogoče vzdrževati in je brez napak.

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

Pojasnilo:

V tem primeru najprej deklariramo funkcijo greet_user prototip na začetku našega programa, pred glavno funkcijo. Nato znotraj glavne funkcije deklariramo ime niza znakov z velikostjo petdeset , in uporabite printf in scanf da vpraša uporabnika za njegovo ime in ga prebere v matriko imen. Po tem pokličemo funkcijo greet_user , ki posreduje matriko imen kot argument.

The funkcijo greet_user kot argument sprejme ime kazalca znakov, ki je kazalec na prvi znak niza. Znotraj funkcije uporabljamo printf da natisnete pozdravno sporočilo, ki vključuje ime uporabnika, in prijazno sporočilo.

Izhod kode bo odvisen od uporabnikovega vnosa. Tukaj je primer, kako bi lahko izgledal rezultat:

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

V tem primeru uporabnik vnese ime 'sumam' , program pa natisne pozdravno sporočilo, ki vključuje njihovo ime.

Zaključek:

Funkcijski prototipi so pomemben del programiranja C, saj omogočajo modularno programiranje, preverjanje napak in samodokumentiranje kode. Z deklaracijo podpisa funkcije, preden jo pokličete, prototipi funkcij omogočajo prevajalniku, da preveri napake, omogoči modularno programiranje in naredi kodo lažjo za branje in razumevanje.

Pri programiranju C so prototipi funkcij običajno vključeni datoteke glave , ki so nato vključeni tako v glavni program kot v datoteke z definicijo funkcij. Omogoča klic funkcij iz katerega koli dela programa, ne da bi zahteval dostop do podrobnosti izvedbe funkcije. Z razumevanjem pomena funkcijskih prototipov in njihove uporabe v programiranju C lahko razvijalci napišejo bolj robustno kodo, ki jo je mogoče vzdrževati in je brez napak.