Tomhet

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 27 juli 2021; kontroller kräver 4 redigeringar .

void  är en typ , typspecifikator och nyckelord i programmeringsspråken C , C++ , Java , C# , Objective-C , D , ActionScript och PHP .

Historik

Bland moderna programmeringsspråk dök nyckelordet voidförst upp i C++ för att stödja konceptet med generiska pekare . Men på grund av dess snabba lån från C++ var det första normativa dokumentet som innehöll detta nyckelord C-standarden, publicerad av ANSI 1989. Inom C++-språket voidstandardiserades den 1998.

Därefter voidärvdes nyckelordet och relaterade språkkonstruktioner av Java och C#, D, PHP [1] .

Syntax

Syntaktiskt sett voidär det en av typspecifikationerna i den mer allmänna gruppen av deklarationsspecifikatorer , men implementeras som en sats i vissa programmeringsspråk. Till exempel, i JavaScript void är det en operator och returnerar alltid undefined:

void uttryck === odefinierat ;

Semantik

Semantiken för nyckelordet är voidinte föremål för den allmänna semantiken för typspecifikatorer och beror på användningen:

  • Som namnet på en funktionsreturtyp: indikerar att funktionen inte returnerar ett värde och att funktionsanropet är ett void uttryck . Brödtexten i en sådan funktion bör inte innehålla retursatser med uttryck. Till exempel:voidf ( );
  • Som en del av en funktionsdeklarator : indikerar att funktionen har en prototyp och inga parametrar. Till exempel:int f ( tomt );
  • Som namnet på måltypen för en cast-operation: en sådan tom cast betyder att kasta bort värdet på cast-uttrycket. Till exempel:#define promote_ptr() ((void) (ptr++))
  • Som en del av ett void-pekartypnamn : en sådan pekare kan representera värdena för alla pekare till objekt och ofullständiga typer , det vill säga adresserna till alla objekt . Således är void-pointer en generaliserad objektpekare . void-pekare kan inte representera värdena för funktionspekare . Förutom i fallet med att casta en const noll-pekare till en funktionspekare i C, finns det inga explicita eller implicita omvandlingar mellan void-pekare och funktionspekare.

Typen voiddefinieras som en ofullständig typ som inte kan kompletteras. Som en konsekvens bör denna typ inte användas där endast fullständiga typer är tillåtna, till exempel som en parametertyp i en funktionsdefinition .

C-språket före void

Före publiceringen av den första C-standarden 1989, som introducerade nyckelordet void, var det vanligt att deklarera funktioner som inte returnerade värden utan att använda typspecifikationer. Även om en sådan deklaration semantiskt sett var likvärdig med att deklarera en funktion som returnerar ett värde av typ int, betonade de avsiktligt utelämnade typspecifikationerna att funktionen inte returnerade något särskilt värde. Till exempel:

f ( lång ) _ { /* ... */ }

På liknande sätt skrevs funktionsdefinitioner som inte hade några parametrar med tomma parenteser:

int main () { /* ... */ }

En pekare till char användes som en generisk pekare . Dessutom kräver moderna standarder att representations- och anpassningskraven för voidpekare är desamma som för pekare till char, vilket innebär att dessa typer är utbytbara .

Den första standarddialekten av C ( C89 ), även om den redan tillåter notering med nyckelordet void, tillät fortfarande denna användning av den implicita int för att upprätthålla kompatibilitet med befintlig kod. Modern C-dialekt ( C99 ) tillåter inte frånvaron av typspecifikationer i typnamn och deklarationer.

Exempel

Exempel på att deklarera en funktion som returnerar ogiltig visas.

C++

ogiltig meddelande ()

Java

ogiltig meddelande ()

C#

ogiltig meddelande ()

C

ogiltig meddelande ()

Objective-C

- ( ogiltigt ) meddelande ;

D

ogiltig meddelande ()

ActionScript

funktionsmeddelande ( ) : void

PHP (> 7.0)

funktionsmeddelande ( ) : void

Grundläggande

undermeddelande ( )

Anteckningar

  1. [1] Arkiverad 4 december 2016 på Wayback Machine Ny typ av nyheter från utvecklarna av PHP-språket