2010-09-06 18 views
11

Einige C++ - Compiler erlauben der Hauptfunktion den Rückgabetyp void. Aber benötigt das Betriebssystem nicht int Typ Wert zurückgegeben, um anzugeben, ob das Programm gut endete oder nicht?C++ void Rückgabetyp von main()

+18

Wo haben Sie das gelernt? C++ benötigt 'main', um einen Rückgabetyp von' int' zu haben. –

+6

Dies ist die N-te Zeit, die ich diesen Link poste, wobei N eine sehr große ganze Zahl ist. http://www2.research.att.com/~bs/bs_faq2.html#void-main Aber es hilft nie :-( – dirkgently

+4

@dirkgently: "Aber es hilft nie" ... Ich hoffe es hat zumindest geholfen N Menschen :). –

Antwort

26

C++ tut nicht erlauben main, um eine void Rückgabetyp zu haben. Der veröffentlichte C++ - Standard verlangt, dass es int ist. Einige C++ Compiler erlauben es Ihnen, void zu verwenden, aber das wird nicht empfohlen. Im Allgemeinen interessiert sich das Betriebssystem nicht für die eine oder andere Art. Für ein bestimmtes Betriebssystem ist möglicherweise ein Programm erforderlich, das einen Rückgabewert angibt, es muss jedoch nicht unbedingt vom Rückgabewert main stammen. Wenn der C++ - Compiler void zulässt, bietet es wahrscheinlich eine andere Möglichkeit, den Exit-Code des Programms anzugeben.

4

Der C++ - Standard erlaubt main() nicht den Rückgabetyp void. Die meisten Compiler lassen es jedoch aus historischen Gründen passieren.

5

main Die Rückgabe void wird aus Gründen der Abwärtskompatibilität akzeptiert, ist jedoch nicht zulässig.

In diesem Fall wird der Exit-Code 0 sein. Sie können den Exit-Code weiterhin mit der Exit-Funktion ändern.

19

C++ erlaubt Hauptfunktion Rückgabetyp ungültig

Nein zu haben, es funktioniert nicht.

Der C++ - Standard erfordert nur zwei verschiedene Arten von Hauptsignaturen. Andere können optional hinzugefügt werden, wenn der Rückgabetyp int ist.

Implementierungen von C++, die void Rückgabetypen zulassen, sind in Bezug auf den C++ - Standard falsch.

C++ 03-Standard S. 3.6.1-2:

Eine Implementierung ist nicht die Hauptfunktion vordefinieren. Diese Funktion darf nicht überlastet werden. Es soll einen Rückgabetyp vom Typ int haben, aber ansonsten ist sein Typ implementierungsdefiniert.

int main() { /* ... */ } 
int main(int argc, char* argv[]) {/* ... */ } 

Wenn Sie portable C wollen ++ Code oder ein guter C++ Beispiele zu schreiben, dann sollten Sie immer über eine der zwei Varianten verwenden: Alle Implementierungen müssen sowohl der folgenden Definitionen von Haupt ermöglichen.

1

Deshalb ist void main() nicht erlaubt durch Standard-C++ - obwohl einige Compiler (z. B. gcc) es erlaubt.

Um es kurz zu machen: Verwenden Sie immer int main(), nie void main().

+0

gcc erlaubt es für C, aber verbiete es für C++, auch wenn du sagst, dass es -fürmissiv ist. – BatchyX

3

In Sprachen, in denen eine void Rückgabe von main zulässig ist (nicht C++), sieht das Betriebssystem normalerweise einen Rückgabewert von 0 bei normaler (nicht außergewöhnlicher) Programmbeendigung.

0
But doesn't OS require int type value returned to specify whether program 
ended well or not? 

Warum sollte es immer?Wenn Sie bei einem Doppelklick auf das Symbol auf Windows klicken, stirbt der Prozess nach dem Beenden ab. OS überprüft dort den Rückgabetyp nicht. Selbst unter Linux, wenn Sie die Binärdatei einfach als ./runBinary ausführen, wird sie einfach ausgeführt und beendet. Das Betriebssystem zeigt keine Nachricht an, dass es fehlschlägt oder erfolgreich ist.

Alle oben genannten Antworten sind richtig, dass der Standard sagt, es ist int, aber einige Compiler lassen auch void.

0

Je nach Compiler, können Sie möglicherweise eine void main-Funktion verwenden, aber die richtige Art und Weise (dass ein wirklich standardkonformer Compiler sollte folgen) ist int mit 0 ist eine schöne & sauberen Ausgang und alles andere angibt dass dein Programm etwas falsch gemacht hat.

Verwandte Themen