„Void (Schlüsselwort)“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Zehdeh (Diskussion | Beiträge) K →Typumwandlung: formatierung |
|||
Zeile 13: | Zeile 13: | ||
== Void in C und C++ == |
== Void in C und C++ == |
||
In C und C++ ist <code>void</code> syntaktisch und semantisch ein Basisdatentyp. Es ist der sogenannte „leere Datentyp“ (engl. ''empty type'') und ein „incomplete type“. Letzteres sorgt dafür, dass man keine Objekte vom Typ <code>void</code> anlegen kann. |
|||
⚫ | |||
⚫ | |||
=== Untypisierte Zeiger === |
=== Untypisierte Zeiger === |
||
Zeile 33: | Zeile 35: | ||
=== Typumwandlung === |
=== Typumwandlung === |
||
Eine Typumwandlung |
Eine Typumwandlung nach <code>void</code> bedeutet, dass der Wert des Ausdrucks verworfen wird. Dies kann benutzt werden, um explizit anzugeben, dass ein Wert nicht benutzt wird, z.B. ein Funktionsargument nicht benötigt wird oder der Rückgabewert einer Funktion nicht interessiert. |
||
Ein Beispiel: |
Ein Beispiel: |
||
<source lang="C"> |
|||
double versandkosten(int anzahl, double preis) { |
double versandkosten(int anzahl, double preis) { |
||
(void)preis; // bisher nicht genutzt |
(void)preis; // bisher nicht genutzt |
||
void |
|||
return 2.0 * anzahl; |
return 2.0 * anzahl; |
||
} |
} |
||
void raeume_auf(FILE* f) { |
|||
⚫ | |||
(void)fclose(f); // (fehler-)rückgabewert ist egal. |
|||
} |
|||
</source> |
|||
⚫ | |||
== Einzelnachweise == |
== Einzelnachweise == |
Version vom 23. Juli 2012, 08:24 Uhr
Das Schlüsselwort void (engl. für „nichtig“, „ungültig“, „leer“) wird in einigen Programmiersprachen anstelle eines Datentyps benutzt, um anzugeben, dass keine Daten übergeben werden oder der Typ der Daten nicht angegeben ist. Syntaktisch wird void
wie ein Datentyp behandelt, aber es kann nur an bestimmten Stellen stehen. So ist es zum Beispiel nicht möglich, eine Variable vom Typ void
zu deklarieren.
Void als Rückgabetyp
In den Programmiersprachen C, C++, Java und C# wird void
für Funktionen bzw. Methoden ohne Rückgabewert (sog. Prozeduren) benutzt. In diesen Sprachen muss syntaktisch für jede Funktion/Methode ein Rückgabetyp angegeben werden; wenn kein Wert zurückgegeben wird, steht statt dessen void
.
Das folgende Beispiel definiert eine Methode ohne Rückgabewert in Java:
void hallo() { System.out.println("Hallo Welt!"); }
Void in C und C++
In C und C++ ist void
syntaktisch und semantisch ein Basisdatentyp. Es ist der sogenannte „leere Datentyp“ (engl. empty type) und ein „incomplete type“. Letzteres sorgt dafür, dass man keine Objekte vom Typ void
anlegen kann.
void
wird in diesen Sprachen für drei weitere Aufgaben genutzt:
Untypisierte Zeiger
Mit void *
wird ein Zeiger deklariert, ohne den Typ der Daten anzugeben, auf die der Zeiger verweist (untypisierter Zeiger, pointer to void). Ein untypisierter Zeiger kann nicht dereferenziert oder für Zeigerarithmetik benutzt werden, sondern muss zuerst per Typumwandlung in einen typisierten Zeiger umgewandelt werden.
Funktionsargumente
Funktionen ohne Argumente sollten in C mit dem Schlüsselwort void
anstelle der Argumentliste deklariert werden, wie in folgendem Beispiel:
void hallo(void) { printf("Hallo Welt!\n"); }
Dieser Sonderfall ist nötig, weil es in C zwei verschiedene Arten gibt, Funktionen zu deklarieren. In der ursprünglichen Notation (old-style) wurden im Funktionskopf die Typen der Argumente nicht angegeben; die neue Notation wurde eingeführt, damit Compiler Anzahl und Typ von Argumenten bei einem Funktionsaufruf überprüfen können. Um Kompatibilität mit bestehendem C-Code zu gewährleisten, wurden Deklarationen mit der alten Notation weiterhin erlaubt. Damit Funktionsdeklarationen ohne Argumente nicht fälschlicherweise als old-style erkannt werden, wurde festgelegt, dass in diesem Fall das Schlüsselwort void
anstelle der Argumentliste steht.
In C++ ist void
als Argumentliste äquivalent zu einer leeren Argumentliste.[1] Old-style-Funktionsdeklarationen sind in C++ nicht möglich.[2]
Typumwandlung
Eine Typumwandlung nach void
bedeutet, dass der Wert des Ausdrucks verworfen wird. Dies kann benutzt werden, um explizit anzugeben, dass ein Wert nicht benutzt wird, z.B. ein Funktionsargument nicht benötigt wird oder der Rückgabewert einer Funktion nicht interessiert.
Ein Beispiel:
double versandkosten(int anzahl, double preis) {
(void)preis; // bisher nicht genutzt
void
return 2.0 * anzahl;
}
void raeume_auf(FILE* f) {
(void)fclose(f); // (fehler-)rückgabewert ist egal.
}
Der Programmierer gibt damit an, dass das Argument preis
nicht vergessen wurde, sondern absichtlich nicht genutzt wird. Dies dient dazu, den Code zu dokumentieren und eventuell Warnungen des Compiler zu unterdrücken.
Einzelnachweise
- ↑ Margaret A. Ellis, Bjarne Stroustrup: The Annotated C++ Reference Manual. Addison-Wesley, Reading, Massachusetts 1990, ISBN 978-0201514599, S. 138.
- ↑ Bjarne Stroustrup: The C++ Programming Language, Special Edition. Addison-Wesley, Reading, Massachusetts 2000, ISBN 978-0-201-70073-2, S. 816-817.