Prázdný typ - Void type

Typ void , v několika programovacích jazycích odvozených od C a Algol68 , je typem pro výsledek funkce, která se vrací normálně, ale neposkytuje hodnotu výsledku svému volajícímu. Obvykle se takové funkce volají kvůli jejich vedlejším účinkům , jako je provádění nějakého úkolu nebo zápis do jejich výstupních parametrů. Použití typu void v takovém kontextu je srovnatelné s postupy v Pascalu a syntaktických konstrukcích, které definují podprogramy v jazyce Visual Basic . Je také podobný typu jednotky používaného ve funkčních programovacích jazycích a teorii typů. Porovnání viz Typ jednotky # V programovacích jazycích .

C a C ++ také podporují ukazatel na void typ (zadaný jako void *), ale toto je nesouvisející pojem. Proměnné tohoto typu jsou ukazatele na data neurčeného typu, takže v tomto kontextu (ale ne ostatní) void *působí zhruba jako univerzální nebo špičkový typ . Program může pravděpodobně převést ukazatel na jakýkoli typ dat (kromě ukazatele funkce ) na ukazatel na void a zpět na původní typ bez ztráty informací, díky čemuž jsou tyto ukazatele užitečné pro polymorfní funkce. Standard jazyka C nezaručuje, že různé typy ukazatelů mají stejnou velikost nebo zarovnání.

V C a C ++

Funkce s typem výsledku void končí buď dosažením konce funkce, nebo provedením příkazu return bez vrácené hodnoty. Prázdnota typu se také může objevit jako jediný argument, o prototyp funkce pro indikaci, že funkce trvá žádné argumenty. Všimněte si, že navzdory jménu ve všech těchto situacích slouží prázdný typ jako typ jednotky , nikoli jako nulový nebo dolní typ (který se někdy matoucím způsobem nazývá „void type“), i když na rozdíl od skutečného typu jednotky, který je singleton, typu void chybí způsob, jak vyjádřit jeho hodnotu, a jazyk neposkytuje žádný způsob, jak deklarovat objekt nebo reprezentovat hodnotu s typem void.

V nejranějších verzích C měly funkce bez konkrétního výsledku výchozí návratový typ inta funkce bez argumentů měly jednoduše prázdné seznamy argumentů. Ukazatele na netypová data byly deklarovány jako celá čísla nebo ukazatele na char. Některé časné překladače jazyka C měly funkci, nyní považovanou za mrzutost, za generování varování při jakémkoli volání funkce, které nepoužilo vrácenou hodnotu funkce. Starý kód někdy vrhá taková volání funkcí na void, aby potlačila toto varování. Než Bjarne Stroustrup zahájil práci na C ++ v letech 1979–1980, ukazatele void a void byly součástí dialektu jazyka C podporovaného kompilátory odvozenými od AT&T.

Explicitní použití void vs. neposkytnutí žádných argumentů v prototypu funkce má jinou sémantiku v C a C ++, jak je podrobně uvedeno v následující tabulce:

C C ++ ekvivalent
void f(void); void f();( upřednostňováno )
void f(void);
void f();( přijímá konstantní, ale neznámý počet argumentů ) template <typename... Ts> void f(Ts... ts) {}

(není striktně ekvivalentní)

Prototyp AC bez argumentů, např. void f()Výše, byl v C99 zastaralý .

V Haskellu

Docela na rozdíl od C ++, ve funkčním programovacím jazyce Haskell označuje typ void prázdný typ, který nemá žádné obyvatele [1] . Funkce do typu void nevrátí výsledky a vedlejší efektivní program s podpisem typu se neukončí IO Void nebo dojde k chybě. Zejména neexistují žádné celkové funkce do typu void.

Reference