Prototyp funkce - Function prototype

V programování počítače , je prototyp funkce nebo funkce rozhraní je prohlášení o funkci , která určuje jméno a funkce je druh podpis ( arity , datové typy z parametrů a návratový typ ), ale vynechává funkci těla. Zatímco definice funkce určuje, jak funkce dělá to, co dělá („implementace“), prototyp funkce pouze specifikuje své rozhraní, tj. Jaké datové typy vstupují a vystupují. Termín prototyp funkce se používá zejména v kontextu programovacích jazyků C a C ++, kde umisťování dopředných deklarací funkcí do hlavičkových souborů umožňuje rozdělení programu na překladové jednotky , tj. Na části, které může kompilátor samostatně přeložit do objektových souborů . spojeno linkerem do spustitelného souboru nebo knihovny .

V prototypu jsou názvy parametrů volitelné (a v C/C ++ mají rozsah funkčních prototypů, což znamená, že jejich rozsah končí na konci prototypu), typ je však nezbytný společně se všemi modifikátory (např. Pokud se jedná o ukazatel nebo odkaz na parametr const ), kromě samotného const.

V objektově orientovaného programování , rozhraní a abstraktní metody slouží hodně stejný účel.

Příklad

Zvažte následující prototyp funkce:

void Sum( int a, int b );

NEBO

void Sum( int, int );

Prototypy funkcí v první řadě zahrnují podpis funkce, název funkce, typ návratu a specifikátor přístupu. V tomto případě je název funkce „Součet“. Podpis funkce určuje počet parametrů a jejich typy. Ve výše uvedeném příkladu je návratový typ „neplatný“. To znamená, že funkce nevrátí žádnou hodnotu. Názvy parametrů v prvním příkladu jsou volitelné.

Využití

V dřívějších verzích C, pokud funkce nebyla dříve deklarována a její název se vyskytoval ve výrazu následovaném levou závorkou, byla implicitně deklarována jako funkce, která vrací inta o jejích argumentech se nepředpokládalo nic. V tomto případě by kompilátor nemohl provést kontrolu platnosti kompilace počtu a typů argumentů, což může způsobit problémy. Následující kód ukazuje situaci, ve které je chování implicitně deklarované funkce nedefinované .

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

Funkce MyFunction očekává, že při volání bude celočíselný argument v zásobníku nebo v registru . Pokud je prototyp vynechán, kompilátor to nebude moci vynutit a MyFunction skončí v provozu na nějakém jiném datu v zásobníku (možná návratová adresa nebo hodnota proměnné, která aktuálně není v rozsahu ). Zahrnutím prototypu funkce informujete kompilátor, že funkce MyFunction přebírá jeden celočíselný argument a povolíte kompilátoru zachytit tyto druhy chyb a zajistit hladký průběh procesu kompilace. Tato funkce byla odebrána ze standardu C99 , takže vynechání prototypu funkce bude mít za následek chybu kompilace.

Vytváření rozhraní knihovny

Umístěním prototypů funkcí do souboru záhlaví lze určit rozhraní pro knihovnu .

Třídní prohlášení

V C ++ se prototypy funkcí používají také v definicích tříd .

Viz také

Reference

  • Kernighan, Brian W .; Ritchie Afree, Dennis M. (1988). Programovací jazyk C (2. vydání). Upper Saddle River, New Jersey: Prentice Hall PTR. ISBN 0-13-110362-8.