Tom typ
Void -typen , i flera programmeringsspråk härledda från C och Algol68 , är returtypen för en funktion som returnerar normalt, men som inte ger ett resultatvärde till sin anropare. Vanligtvis kallas sådana funktioner för sina biverkningar , som att utföra en uppgift eller skriva till deras utdataparametrar. Användningen av void-typen i sådana sammanhang är jämförbar med procedurer i Pascal och syntaktiska konstruktioner som definierar subrutiner i Visual Basic . Den liknar också den enhetstyp som används i funktionella programmeringsspråk och typteori. Se Enhetstyp#I programmeringsspråk för en jämförelse.
C och C++ stöder också pekaren till void-typen (specificerad som void *
), men detta är ett orelaterade begrepp. Variabler av denna typ är pekare till data av en ospecificerad typ, så i detta sammanhang (men inte de andra) fungerar void *
ungefär som en universell eller topptyp . Ett program kan konvertera en pekare till vilken typ av data som helst (förutom en funktionspekare ) till en pekare till void och tillbaka till den ursprungliga typen utan att förlora information, vilket gör dessa pekare användbara för polymorfa funktioner. C-språkstandarden garanterar inte att de olika pekartyperna har samma storlek eller justering.
I C och C++
En funktion med void resultattyp slutar antingen genom att nå slutet av funktionen eller genom att exekvera en return-sats utan returnerat värde. Void-typen kan också ersätta argumentlistan för en funktionsprototyp för att indikera att funktionen inte tar några argument. Observera att i alla dessa situationer är void inte en typkvalificerare på något värde. Trots namnet liknar detta semantiskt en implicit enhetstyp , inte en noll- eller bottentyp (som ibland förvirrande kallas "void-typen"). Till skillnad från en riktig enhetstyp som är en singel, saknar void-typen ett sätt att representera sitt värde och språket ger inget sätt att deklarera ett objekt eller representera ett värde med typen void
.
I de tidigaste versionerna av C hade funktioner utan specifikt resultat som standard en returtyp av int
och funktioner utan argument hade helt enkelt tomma argumentlistor. Pekare till otypade data deklarerades som heltal eller pekare till char
. Vissa tidiga C- kompilatorer hade funktionen, som nu ses som ett irritationsmoment, att generera en varning på alla funktionsanrop som inte använde funktionens returnerade värde. Gammal kod slänger ibland sådana funktionsanrop till ogiltig för att undertrycka denna varning. När Bjarne Stroustrup började pekare . sitt arbete med C++ 1979–1980, var void- och void- en del av C-språkdialekten som stöddes av AT&T-härledda kompilatorer
Den explicita användningen av void kontra att inte ge några argument i en funktionsprototyp har olika semantik i C och C++, som beskrivs i följande tabell:
C | C++ motsvarande |
---|---|
void f(void);
|
void f(); ( föredraget ) void f(void);
|
void f(); ( accepterar ett konstant men okänt antal argument ) |
mall void f(Ts... ts) {}
(inte strikt likvärdig) |
AC-prototyp som inte tar några argument, t.ex. void f()
ovan, har dock fasats ut i C99 .
I Haskell
Tvärtemot C++, i det funktionella programmeringsspråket Haskell betecknar void-typen den tomma typen, som inte har några invånare [1] . En funktion i void-typen returnerar inte resultat, och ett sidoeffektfullt program med typsignaturen IO Void
avslutas inte eller kraschar. I synnerhet finns det inga totala funktioner i tomrumstypen.