Prototip de funcție

În versiunile anterioare ale C, dacă o funcție nu a fost declarată anterior și numele său apărea într-o expresie urmată de o paranteză stângă, aceasta era implicit declarată ca o funcție care returnează un int și nu se presupunea nimic despre argumentele sale. În acest caz, compilatorul nu putea efectua verificarea la compilare a tipurilor de argumente și a aritmeticii sintactice atunci când funcția era aplicată unor argumente. Acest lucru poate cauza probleme. Următorul cod ilustrează o situație în care comportamentul unei funcții declarate implicit este nedefinit.

#include <stdio.h>/* If this prototype is provided, the compiler will catch the error in * |main|. If it is omitted, then the error may go unnoticed. */int MyFunction(int n); /* Prototype */int main( void ) /* Calling function */{ printf("%d\n", MyFunction()); /* Error: forgot argument to MyFunction */ return 0;}int MyFunction( int n ) /* Called function definition */{ if (n == 0) { return 1; } else { return n * MyFunction(n - 1); }}

Funcția MyFunction se așteaptă ca un argument întreg să se afle pe stivă sau într-un registru atunci când este apelată. Dacă prototipul este omis, compilatorul nu va avea nicio modalitate de a impune acest lucru, iar funcția MyFunction va sfârși prin a opera pe o altă dată de pe stivă (posibil o adresă de întoarcere sau valoarea unei variabile care nu se află momentan în domeniu). Prin includerea prototipului funcției, informați compilatorul că funcția MyFunction acceptă un argument întreg și permiteți compilatorului să detecteze acest tip de erori și să facă procesul de compilare să se desfășoare fără probleme. Această caracteristică a fost eliminată din standardul C99, astfel că omiterea unui prototip de funcție va duce la o eroare de compilare.

Crearea interfețelor de bibliotecăEdit

Prin plasarea prototipurilor de funcție într-un fișier antet, se poate specifica o interfață pentru o bibliotecă.

Declararea claselorEdit

În C++, prototipurile de funcție sunt, de asemenea, utilizate în definițiile de clasă.

Lasă un răspuns

Adresa ta de email nu va fi publicată.