void main (void) gegen main () [duplizieren]

8

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?

    
Joseph Lee 14.12.2012, 10:29
quelle

5 Antworten

12

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 .

    
Omkant 14.12.2012 10:32
quelle
2

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

    
Ravi 14.12.2012 11:06
quelle
1

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.

    
Kevin 14.12.2012 10:34
quelle
1

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

interpretiert wird %Vor%

Der void type sagt dem Compiler, dass es keine 'Entity' (kein 'Speicher') gibt, also

%Vor%

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.

    
lunadir 14.12.2012 10:49
quelle
0

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:

%Vor%

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 ) :

%Vor%

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 * :

zurück %Vor%

In einer gehosteten Implementierung (im Grunde alles mit einem Betriebssystem) muss main als

deklariert sein %Vor%

oder

%Vor%

oder einige andere implementierungsdefinierte Art ; eine Implementierung darf akzeptieren

%Vor%

als legitime Signatur für main , muss aber explizit irgendwo dokumentiert werden .

    
John Bode 14.12.2012 13:12
quelle

Tags und Links