Funkční prototyp - Function prototype - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.Září 2016) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
v programování, a funkční prototyp nebo funkční rozhraní je prohlášení a funkce který určuje název funkce a podpis typu (arity, typy dat z parametry, a návratový typ ), ale vynechá funkční tělo. Zatímco definice funkce určuje jak funkce dělá to, co dělá („implementace“), prototyp funkce pouze specifikuje své rozhraní, tj. co datové typy vstupují a vystupují z něj. Termín prototyp funkce se používá zejména v kontextu programovacích jazyků C a C ++ kde umístění předat prohlášení funkcí v hlavičkové soubory umožňuje rozdělení programu na překladové jednotky, tj. na části, které a překladač lze samostatně přeložit do soubory objektů, kombinovat a linker do spustitelný nebo a knihovna.
V prototypu jsou názvy parametrů volitelné (a v C / C ++ mají funkční rozsah prototypu, což znamená, že jejich rozsah končí na konci prototypu), ale typ je nezbytný spolu se všemi modifikátory (např. Pokud se jedná o ukazatel nebo konst parametr ).
v objektově orientované programování, rozhraní a abstraktní metody slouží téměř stejnému účelu.
Příklad
Zvažte následující prototyp funkce:
prázdnota Součet( int A, int b );
NEBO
prázdnota Součet( int, int );
Nejprve prototypy funkcí zahrnují podpis funkce, název funkce, návratový typ 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 „void“. To znamená, že funkce nevrátí žádnou hodnotu. Názvy parametrů v prvním příkladu jsou volitelné.
Použití
V dřívějších verzích C, pokud funkce nebyla dříve deklarována a její název se objevil ve výrazu následovaném levou závorkou, byla implicitně deklarována jako funkce, která vrací int
a o jeho argumentech se nic nepředpokládalo. V tomto případě by kompilátor nebyl schopen provést kontrolu typů argumentů a syntaxe v době kompilace arity kdy byla funkce použita na některé argumenty. To může způsobit problémy. Následující kód ilustruje situaci, ve které je chování implicitně deklarované funkce nedefinováno.
#zahrnout <stdio.h>/ * Pokud je tento prototyp poskytnut, kompilátor chybu zachytí * | hlavní |. Pokud je vynechán, může chyba zůstat bez povšimnutí. */int MyFunction(int n); / * Prototyp * /int hlavní( prázdnota ) / * Funkce volání * /{ printf("% d n", MyFunction()); / * Chyba: zapomenutý argument pro MyFunction * / vrátit se 0;}int MyFunction( int n ) / * Definice volané funkce * /{ -li (n == 0) { vrátit se 1; } jiný { vrátit se n * MyFunction(n - 1); }}
Funkce MyFunction očekává, že celočíselný argument bude na zásobník nebo v Registrovat když se volá. Pokud je prototyp vynechán, kompilátor nebude mít žádný způsob, jak to vynutit MyFunction skončí s provozem na nějakém jiném vztažném bodu v zásobníku (možná a zpáteční adresa nebo hodnota proměnné, která aktuálně není v rozsah ). Zahrnutím prototypu funkce informujete kompilátor o této funkci MyFunction trvá jeden celočíselný argument a povolíte kompilátoru, aby zachytil tyto druhy chyb a zajistil plynulý běh procesu kompilace. Tato funkce byla odstraněna z C99 standard, tedy opomenutí prototypu funkce bude mít za následek chybu kompilace.
Vytváření rozhraní knihovny
Umístěním funkčních prototypů do a hlavičkový soubor, lze určit rozhraní pro knihovna.
Deklarace třídy
V C ++ se funkční prototypy používají také v třída definice.
Viz také
Reference
- Kernighan, Brian W.; Ritchie Afree, Dennis M. (1988). Programovací jazyk C. (2. vyd.). Upper Saddle River, NJ: Prentice Hall PTR. ISBN 0-13-110362-8.