A C vagy C++ függvény prototípusa egy függvénydeklaráció , amely nem tartalmaz függvénytörzset, de megadja a függvény nevét, arityát , argumentumtípusait és visszatérési adattípusát . Míg a függvénydefiníció leírja, hogy egy függvény mit csinál, a függvény prototípusa felfogható az interfész leírásaként.
A prototípusban az argumentumnevek nem kötelezőek, azonban a típust meg kell adni az esetleges módosítókkal együtt (például, hogy mutatóról vagy állandó argumentumról van szó).
Példaként tekintsük a következő függvény prototípusát:
int foo ( int n );Ez a prototípus deklarál egy "foo" nevű függvényt, amely egy egész típusú "n" argumentumot vesz fel, és egy egész számot ad vissza. A függvénydefiníció bárhol elhelyezhető a programban, de a deklaráció csak használat esetén szükséges.
Ha egy függvényt korábban nem deklaráltak, és a neve egy kifejezésben fordul elő, amelyet közvetlenül egy nyitott zárójel követ, akkor a rendszer implicit módon deklarálja egy típusú eredményt visszaadó függvényként, intés semmit sem feltételez az argumentumairól. Ebben az esetben a fordító nem tudja végrehajtani az argumentumtípus-ellenőrzést és az aritást , ha a függvényt néhány argumentummal hívják meg. Ez egy lehetséges problémaforrás. A következő kód egy olyan helyzetet szemléltet, amelyben egy implicit módon deklarált függvény viselkedése nem definiált.
#include <stdio.h> /* * A prototípus implementálásakor a fordító * hibaüzenetet ad ki a main()-ban. Ha kimarad, akkor nem lesz hibaüzenet. */ int foo ( int n ); /* A függvény prototípusa */ int main ( void ) /* Funkcióhívás */ { printf ( "%d \n " , foo ()); /* HIBA: foo hiányzik egy argumentum! */ return 0 ; } int foo ( int n ) /* Hívó függvény */ { if ( n == 0 ) return 1 ; else return n * foo ( n - 1 ); }A "foo" függvény egy egész típusú argumentumot vár, amely a veremben van a meghívásakor. Ha a prototípust kihagyjuk, a fordító nem tudja feldolgozni, és a „foo” más veremadatokra kerül (valószínűleg a visszatérési címre vagy egy tartományon kívüli változó értékére ). A függvény prototípusának hozzáadásával tájékoztatja a fordítót, hogy a "foo" függvény egyetlen egész típusú argumentumot vesz fel, és lehetővé teszi a fordító számára, hogy kezelje az ilyen típusú hibákat.
A függvényprototípusok fejlécfájlba helyezésével interfészt definiálhat a számára .
A C++ nyelvben a függvényprototípusokat osztálydefiníciókban is használják .