Utilizarea de prototipuri funcționale, de programare C și C

standardul ANSI C lărgește conceptul de descriere pre-funcție. Această descriere se numește funcția extins prototip.

prototipuri funcționale servesc două scopuri: în primul rând, acestea determină tipul de valoarea de returnare a funcției, compilatorul poate genera codul corect pentru datele returnate; În al doilea rând, acestea identifică tipul și numărul de argumente funcții utilizate. Prototipul este după cum urmează:

tip functionname (lista de parametri);

Prototipul este de obicei plasat la începutul programului și trebuie să apară înaintea unui apel de funcție.

În plus, pentru a informa compilatorul despre tipul de valoarea returnată în funcție de prototip funcție permite să efectueze o verificare a tipurilor de calitate, cum ar fi controalele efectuate în limbi, cum ar fi Pascal. Prototipuri permit compilatorului să găsească și să raporteze informații cu privire la toate conversiile de tip ilegale între tipurile de argumente utilizate într-un apel de funcție și anumite tipuri de parametri. De asemenea, compilatorul îi este permis să comunice faptul că funcția este apelată cu un număr greșit de argumente.

Dacă este posibil, convertește în mod automat tipul de argument în parametrul de tip derivat. Cu toate acestea, unele conversii de tip nu sunt permise. Dacă funcția are un prototip, toate conversia ilegală și un mesaj de eroare va fi găsit. Ca un exemplu, următorul program provoacă un mesaj de eroare, deoarece încearcă să apela func () cu un pointer, dar nu float dorit. (Nu se poate converti un pointer la un tip float.)

/ * Acest program utilizează prototipuri funcționale pentru a realiza verificarea de tip puternic atunci când apelați FUNC (). Programul nu poate fi compilat din cauza unei nepotriviri între tipul de argumente definite în funcție prototip, iar tipul de argumente utilizate într-un apel de funcție. * /

#include
float func (int x, float y); / * Prototip * /
int main (void)
int x, * y;
x = 10;
y = x;
func (x, y); / * Tip nepotrivire * /
return 0;
>

float func (int x, float y)
printf ( "% f", y / (float) x);
întoarcere y / (float) x;
>

Folosind prototipul, de asemenea, permite compilatorului să emită un mesaj în cazul în care numărul de argumente utilizate în funcția de apel nu corespunde cu numărul de parametri specificați în funcție. De exemplu, următorul program nu se va compila deoarece func () este numit cu greșit numărul de argumente:

/ * Programul nu compilează din cauza unei nepotriviri între numărul de parametri definiți în prototipul funcției, precum și numărul de argumente utilizate într-un apel de funcție. * /

#include
float func (int x, float y); / * Prototip * /
int main (void)
func (2, 2,0, 4); / * Număr incorect de argumente * /
return 0;
>

Din punct de vedere tehnic, atunci când creați un prototip funcție nu trebuie să includă numele reale ale parametrilor. De exemplu, următoarele două opțiuni sunt absolut valabile și echivalente:

func char (char *, int);

FUNC char (char * str, int count);

Cu toate acestea, dacă includeți numele parametrilor, compilatorul utilizează numele pentru eliberarea de tipuri de neconformitate de mesaje.

Unele funcții, cum ar fi printf () poate accepta un număr variabil de argumente. Un număr variabil de argumente este determinată în prototipul prin punct. De exemplu, prototipul funcției printf () arata ca acest lucru:

int printf (const char * fmt.);

trebuie să ne întoarcem la descrierea funcției standard de va_arg bibliotecă () pentru a crea funcții cu un număr variabil de argumente.

Este necesar să se utilizeze prototipuri funcționale pentru a preveni erorile care apar ca urmare a funcției apeluri cu argumente greșite. De asemenea, ele ajuta pentru a verifica corectitudinea programului, fără a permite funcția este apelată cu un număr greșit de argumente. Așa cum am menționat mai devreme, acestea sunt necesare in C ++.

articole similare