Diskussion:Void (Schlüsselwort)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Nächster Abschnitt[Quelltext bearbeiten]

Ich finde hier sollte noch void * erklärt werden. --80.144.122.239 15:37, 28. Okt. 2007 (CET)Beantworten

Untypisierte Zeiger sind unter http://de.wikipedia.org/wiki/Zeiger_%28Informatik%29 erklärt. --217.84.1.158 10:36, 22. Jan. 2008 (CET)Beantworten

Schön dass der Artikel ob der Aufgeräumtheit unter Datentypen steht - aber seit wann ist void denn ein Datentyp? Im Artikel sollte vielleicht besser erwähnt werden, dass void nichts ist und an manchen Stellen anstelle eines Datentyps stehen darf (z.B. als Rückgabewert irgendwelcher Funktionen in C) --Monoxyde 21:20, 5. Apr. 2008 (CEST)Beantworten

Sicher ist void kein Datentyp, sondern z.B.

  1. formaler Rückgabewert einer Funktion (bzw. Methode), die keinen Rückgabewert hat
  2. formaler Parameter einer Funktion(bzw. Methode),die keine Parameter hat
  3. etc.

Die schönste Formulierung, die ich im Netz dazu gefunden habe: "Datentyp vom Typ 'Kein Datentyp'. Der Datentyp void als Rückgabewert einer Methode deutet darauf hin, dass die Methode keinen Wert zurückgibt" [1]

--Kgfleischmann 10:22, 18. Jun. 2011 (CEST)Beantworten

Umbenennen nach: Void (Datentyp)[Quelltext bearbeiten]

In C und C++ ist void ein Datentyp, der sogenannte „leere Datentyp“ und dazu noch ein „incomplete type“ (was die Ursache dafür ist, dass man keine Variablen vom Typ „void“ anlegen kann).
Wie sieht das in anderen Programmiersprachen aus? --RokerHRO (Diskussion) 08:18, 23. Jul. 2012 (CEST)Beantworten

In JavaScript ist void ein Operator: https://developer.mozilla.org/en/JavaScript/Reference/Operators/void --Fomafix (Diskussion) 09:43, 23. Jul. 2012 (CEST)Beantworten
Interessant! Warum steht das noch nicht im Artikel? :-) --RokerHRO (Diskussion) 16:04, 23. Jul. 2012 (CEST)Beantworten
void steht eigentlich für zwei datentypen:
  • Unit, der typ für "wert, aber keine information". es gibt genau einen wert dieses typs. eine variable dieses typs macht durchaus sinn, enthielte aber keinerlei information. das 0-tupel, sozusagen.
  • Nothing, der typ für "kein wert". es gibt keinen wert dieses typs. eine variable dieses typs kann es nicht geben, aber eine funktion mit einer endlosschleife hätte ihn z.b. als ergebnistyp.
C/C++/java werfen das leider in einen topf was zu verwirrung führt. -- 10:56, 23. Jul. 2012 (CEST)Beantworten
Da ich wohl zu sehr in C++ denke, verstehe ich nicht ganz, was du meinst. Kannst du bitte Beispiele geben, wo der Unterschied zwischen den von dir genannten Bedeutungen klar wird? --RokerHRO (Diskussion) 16:04, 23. Jul. 2012 (CEST)Beantworten

hier ein minimales java-beispiel:

/**
hier meint void nothing.
die funktion kommt nie zurück, sie hat keinen rückgabewert. 
den typ keines wertes nenne ich nothing.
*/
public void foo() { foo() }

/**
hier meint void unit.
die funktion kommt mit einem wert zurück, der ist aber sehr nichtssagend.
den typ des komplett nichtssagenden wertes nenne ich unit.
*/
public void bar() {}

das selbe schriebe man in scala so:

def foo:Nothing = foo
def var:Unit    = ()

alternativ nochmal ein bißchen pseudo-mathematik.
ein typ ist sowas wie ein set von werten:

  • int entspricht 2^32,
  • byte entspricht 2^8,
  • boolean entspricht 2,
  • unit entspricht 1 und
  • nothing entspricht 0.

void ist sowohl 1 als auch 0, je nach kontext.
jetzt ein bißchen klarer? -- 03:34, 24. Jul. 2012 (CEST)Beantworten

Nicht wirklich. Dein Endlosbeispiel funktioniert ja genauso mit jedem anderen Parameter-Rückgabetyp:
int foo(int x) { return foo(-x/2); }
Die Frage, was eine Endlosschleife/Endlosrekursion "wenn sie fertig ist", zurückgibt, ist eh müßig, da die Prämisse halt nicht erfüllt ist. Von daher kann ich auch sagen: Wenn sie zurückkehrt, dann gibt sie ein int mit dem Wert zurück: Ex falso quodlibet. :-/ --RokerHRO (Diskussion) 07:22, 24. Jul. 2012 (CEST)Beantworten
"ex falso quodlibet" trifft's genau: nothing ist subtyp aller anderen typen. deswegen wird er auch "bottom" genannt. für unit hingegen gilt das nicht. -- 17:16, 24. Jul. 2012 (CEST)Beantworten
Die Typen hast du damit erklärt, aber nicht, warum dein Beispiel demonstriert, dass void auch Datentyp für Nothing sei. Das trifft für void genauso zu wie für jedes andere Schlüsselwort. Deshalb sollte vielleicht betont werden, dass kein Datentyp-Schlüsselwort identisch mit dem Datentyp ist, sondern nur ein syntaktisches Element. --Zahnradzacken (Diskussion) 21:40, 24. Jul. 2012 (CEST)Beantworten

"void" vor return in: "Void in C und C++" --> "Typumwandlung" --> Beispiel[Quelltext bearbeiten]

In Abschnitt "Void in C und C++", Unterabschnitt "Typumwandlung", im Beispiel steht in der Funktion versandkosten() mittendrin in eigener Zeile ein einsames "void", vor der Zeile mit return.

 (void)preis; // bisher nicht genutzt
 void                // <-- seltsam
 return 2.0 * anzahl;

Welchen Sinn hat dieses void dort? Soll es auf das return wirken? Ich halte das für einen Syntaxfehler (GNU C 2.95.2: "parse error before 'return'").

  • Falls die "void"-Zeile falsch und überflüssig ist, dann löschen.
  • Falls falsch, aber gewollt, dann korrigieren.

Im letzen Fall empfehle ich außerdem, dass der erläuternde Absatz unter dem Beispiel auch auf diese Verwendung eingeht.

GK --5.146.196.35 20:58, 26. Feb. 2013 (CET)Beantworten

Erledigt durch Bearbeitung durch Plaicy vom 28.11.2013, 01:17.
GK, 54.228.57.69 10:14, 19. Feb. 2014 (CET)Beantworten
Wieso wurde das Typumwandlungsbeispiel wegen fehlendem Praxisbezug entfernt? Sind ausführliche Warnung praxisfern? Bei Funktionspointern bekommt man es häufig hin, dass man nicht alle Parameter braucht und da finde ich dann ein void recht praktisch, damit man die wichtigen Warnungen auch sieht:
// gcc -Wextra -Wall -o void-test void-test.c
#include <stdio.h>

typedef void functionPosAndValue(int pos, int value);

void printPosAndValue(int pos, int value) {
  printf("%d: %d\n", pos, value);
}

void printValue(int pos, int value) {
  //(void) pos;
  printf("%d\n", value);
}

void intArrayApply(functionPosAndValue *fp, int *begin, int size) {
  int i;
  for (i=0; i<size; i++) {
    fp(i, begin[i]);
  }
  printf("\n");
}

int main(void) {
  int value[] = {1, 2, 5, 7};
  intArrayApply(printPosAndValue, &value[0], 4);
  intArrayApply(printValue, &value[0], 3);

  return 0;
}

--plaicy (Diskussion) 15:33, 4. Dez. 2019 (CET)Beantworten

Funktion ohne Rückgabewert = Prozedur?[Quelltext bearbeiten]

Wie ist das denn eigentlich?
Hier wird in der Beschreibung eine Prozedur gleichgesetzt mit einer Funktion, die mit void deklariert wurde. Mein Ausbilder sagt, es gibt mit void deklarierte Funktionen, die dennoch Funktionen und keine Prozeduren sind. Was stimmt denn nun? (nicht signierter Beitrag von 212.63.85.73 (Diskussion) 15:59, 19. Dez. 2013 (CET))Beantworten

Kess gefragt: Wieso fragst du uns das und nicht deinen Ausbilder? Er ist dafür da und wird dafür bezahlt, dir genau solche Fragen zu beantworten (und dir die Antworten auch zu erklären)! :-(
In Programmiersprachen wie Pascal wird streng zwischen "Funktionen" (die einen Wert zurückgeben) und "Prozeduren" (die keinen Wert zurückgeben) unterschieden. Es gibt dort auch keinen void Datentyp. In Programmiersprachen mit C-Erbe (C++, Java, C# usw.) gibt es keine Schlüsselwörter, die zwischen Funktionen und Prozeduren unterschieden könnten. Es gibt nur eine Syntax für Funktionsdeklarationen, die zwingend einen Rückgabetyp erfordert. Allerdings kann dieser Rückgabetyp void sein, der genau dafür erschaffen wurde. Eine solche "nichts zurückgebende Funktion" ist dann de facto das gleiche wie eine Prozedur in Pascal.
Du solltest also wirklich nochmal deinen Ausbilder fragen, was er gemeint hat und worin er einen Unterschied zwischen einer Funktion mit void-Rückgabetyp und einer Prozedur sieht. Vielleicht hat er sich auch nur versprochen oder du hast nicht richtig zugehört. :-)
--RokerHRO (Diskussion) 00:19, 20. Dez. 2013 (CET)Beantworten