Ugyldig

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 27. juli 2021; checks kræver 4 redigeringer .

void  er en type , typespecifikation og nøgleord i programmeringssprogene C , C++ , Java , C# , Objective-C , D , ActionScript og PHP .

Historie

Blandt moderne programmeringssprog dukkede nøgleordet voidførst op i C++ for at understøtte konceptet med generiske pointere . Men på grund af dets hurtige lån fra C++ var det første normative dokument, der indeholdt dette nøgleord, C-standarden, udgivet af ANSI i 1989. Inden for C++-sproget voidblev den standardiseret i 1998.

Efterfølgende blev nøgleordet voidog relaterede sprogkonstruktioner arvet af Java og C#, D, PHP [1] .

Syntaks

Syntaktisk er det voiden af ​​typespecifikationerne i den mere generelle gruppe af deklarationsspecificatorer , men er implementeret som en sætning i nogle programmeringssprog. For eksempel er det i JavaScript void en operator og returnerer altid undefined:

void udtryk === udefineret ;

Semantik

Semantikken for søgeordet er voidikke underlagt den generelle semantik for typespecifikationer og afhænger af brugen:

  • Som navnet på en funktionsreturtype: angiver, at funktionen ikke returnerer en værdi, og at funktionskaldet er et void udtryk . Brødteksten af ​​en sådan funktion bør ikke indeholde returudsagn med udtryk. For eksempel:voidf ( );
  • Som en del af en funktionsdeklarator : angiver, at funktionen har en prototype og ingen parametre. For eksempel:int f ( tomt );
  • Som navnet på måltypen for en cast-operation: en sådan tom cast betyder at kassere værdien af ​​cast-udtrykket. For eksempel:#define promote_ptr() ((void) (ptr++))
  • Som en del af et void pointer type navn : sådan en pointer er i stand til at repræsentere værdierne af alle pointere til objekter og ufuldstændige typer , det vil sige adresserne på alle objekter . Således er void-pointer en generaliseret objektpointer . void-pointere er ikke i stand til at repræsentere værdierne af funktionspointere . Bortset fra i tilfælde af at caste en const null pointer til en funktion pointer i C, er der ingen eksplicitte eller implicitte konverteringer mellem void-pointers og funktion pointers.

Typen voider defineret som en ufuldstændig type, der ikke kan udfyldes. Som en konsekvens bør denne type ikke bruges, hvor kun fulde typer er tilladt, f.eks. som en parametertype i en funktionsdefinition .

C-sproget før void

Før udgivelsen af ​​den første C-standard i 1989, som introducerede nøgleordet void, var det almindelig praksis at erklære funktioner, der ikke returnerede værdier uden at bruge typespecifikationer. Mens en sådan erklæring var semantisk ækvivalent med at erklære en funktion, der returnerer en værdi af type int, understregede de bevidst udeladte typespecifikatorer, at funktionen ikke returnerede nogen bestemt værdi. For eksempel:

f ( lang ) _ { /* ... */ }

På samme måde blev funktionsdefinitioner, der ikke havde nogen parametre, skrevet med tomme parenteser:

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

En pointer til char blev brugt som en generisk pointer . Desuden kræver moderne standarder, at repræsentations- og tilpasningskravene for void-pointere er de samme som for pointere til char, hvilket betyder, at disse typer er udskiftelige .

Den første standarddialekt af C ( C89 ), selvom den allerede tillod notation med nøgleordet void, tillod stadig denne brug af den implicitte int for at opretholde kompatibilitet med eksisterende kode. Moderne C-dialekt ( C99 ) tillader ikke fravær af typespecifikationer i typenavne og deklarationer.

Eksempler

Eksempler på at erklære en funktion, der returnerer ugyldig, er vist.

C++

ugyldig besked ()

Java

ugyldig besked ()

C#

ugyldig besked ()

C

ugyldig besked ()

Objective-C

- ( ugyldig ) meddelelse ;

D

ugyldig besked ()

ActionScript

funktionsmeddelelse ( ) : ugyldig

PHP (> 7.0)

funktionsmeddelelse ( ) : ugyldig

Grundlæggende

undermeddelelse ( )

Noter

  1. [1] Arkiveret 4. december 2016 på Wayback Machine Ny type nyheder fra udviklerne af PHP-sproget