Was ist ein void ? Jeder bietet einige Beispiele, ordnungsgemäße Verwendung von void ? Und was ist der Unterschied, wenn wir void main (void)
oder main()
schreiben?
In C bedeutet im Allgemeinen (void)
, dass keine Argumente im Funktionsaufruf erforderlich sind, während ()
eine nicht angegebene Anzahl von Argumenten bedeutet.
z.B.
%Vor%Beim Aufruf der Umgebung
%Vor%Dies war die allgemeine Erklärung.
Aber für Ihren Fall für main () sagt C99 Standard, dass
5.1.2.2.1 Programmstart
Die beim Programmstart aufgerufene Funktion heißt main. Das Implementierung deklariert keinen Prototyp für diese Funktion. Es soll sein definiert mit einem Rückgabetyp von int und ohne Parameter:
int main(void) { /* ... */ }
oder
mit zwei Parametern (die hier als argc und argv bezeichnet werden, obwohl alle Namen können verwendet werden, da sie lokal für die Funktion sind, in der sie sich befinden erklärt):
int main(int argc, char *argv[]) { /* ... */ }
oder gleichwertig;
oder
in einer anderen implementierungsdefinierten Weise.
In diesem void main(void)
-Rückgabetyp sollte also int
stehen.
Und zuletzt, für main()
,
Rückgabetyp ist nicht so implizit zurückgegeben Rückgabetyp wäre int
.
Grundsätzlich ist void ein Datentyp, der im Grunde mit der Methodendeklaration verwendet wird. Es bedeutet nichts oder kein Typ . ZB:
1) int myFunc(void)
- die Funktion übernimmt nichts.
2) void myFunc(int)
- die Funktion gibt nichts zurück
3) void* data;
- 'data' ist ein Zeiger auf Daten unbekannter Art und kann nicht dereferenziert werden
Leere bedeutet "Leere". In Ihrem Beispiel von void main () bedeutet dies, dass die Funktionen main () keinen Wert zurückgeben. Ich fühle mich verpflichtet, Ihnen zu sagen, dass void main () um jeden Preis vermieden werden sollte (kein Wortspiel beabsichtigt), verwenden Sie stattdessen int main (). int main () stellt sicher, dass Ihr Programm beim Schließen einen Wert vom Typ int an das Betriebssystem zurückgeben kann. Es gibt zahlreiche andere Anwendungen von void, besuchen Sie diese Website , wenn Sie mehr darüber lesen möchten.
Ausschließen des Rückgabetyps von main wie in
%Vor% bedeutet nicht, dass es ein void
Typ ist, es hängt vom Compiler ab. Ich denke, man kann sagen, dass es generisch als
Der void
type sagt dem Compiler, dass es keine 'Entity' (kein 'Speicher') gibt, also
nimmt einen int, gibt aber nichts zurück. Bei Parametern dies:
%Vor%entspricht dem:
%Vor% zeigt explizit an, dass keine Parameter verwendet werden.
Eine andere Geschichte ist mit dem Typ void *
, der ist ein Typ, ein Zeiger auf etwas dimensionslos.
void
ist ein Datentyp ohne Werte. Es ist auch ein unvollständiger -Datentyp, der nicht vervollständigt werden kann. Wenn es als Rückgabetyp für eine Funktion verwendet wird, gibt es an, dass die Funktion keinen Wert zurückgibt:
Wenn es als Parameterliste verwendet wird, zeigt es an, dass die Funktion keine Argumente annimmt:
%Vor% Dies unterscheidet sich von einer leeren Parameterliste, die angibt, dass die Funktion eine nicht spezifizierte Anzahl von Argumenten (in C; in C ++ eine leere Parameterliste ist die gleiche wie die Verwendung von void
) :
Kein Objekt (Variable) kann void
eingegeben werden. Sie können jedoch Zeiger vom Typ void *
deklarieren: Dies sind "generische" Zeiger, die ohne explizite Umsetzung in andere Zeigertypen konvertiert werden können. Die Standard-Speicherzuordnungsfunktionen malloc
, calloc
und realloc
alle geben void *
:
In einer gehosteten Implementierung (im Grunde alles mit einem Betriebssystem) muss main
als
oder
%Vor%oder einige andere implementierungsdefinierte Art ; eine Implementierung darf akzeptieren
%Vor% als legitime Signatur für main
, muss aber explizit irgendwo dokumentiert werden .