Mögliches Duplikat:
Verbietet der C++-Standard den Prototyp void main()?
Warum lässt C++ nicht zu, dass ich void main()
? Es ist kein großes Problem, aber ich bin trotzdem neugierig.
Mögliches Duplikat:
Verbietet der C++-Standard den Prototyp void main()?
Warum lässt C++ nicht zu, dass ich void main()
? Es ist kein großes Problem, aber ich bin trotzdem neugierig.
Weil der Rückgabetyp von main()
(wie in der Norm vorgeschrieben) müssen sein int
C++03 [ Section 3.6.1
Hauptfunktion]
Eine Implementierung darf die Hauptfunktion nicht vordefinieren. Diese Funktion darf nicht überladen werden. Sie muss einen Rückgabetyp vom Typ int haben , aber ansonsten ist sein Typ durch die Implementierung definiert.
Antwort von Stroustrup selbst:
Kann ich "void main()" schreiben? Die Definition
void main() { /* ... */ }
ist und war nie C++, noch war es jemals C. Siehe ISO C++ Standard 3.6.1[2] oder ISO C Standard 5.1.2.2.1. Eine konforme Implementierung akzeptiert
int main() { /* ... */ }
y
int main(int argc, char* argv[]) { /* ... */ }
Eine konforme Implementierung kann mehrere Versionen von main() bereitstellen, aber sie müssen alle den Rückgabetyp int haben. Der von main() zurückgegebene int ist eine Möglichkeit für ein Programm, einen Wert an "das System" zurückzugeben, das es aufruft. Auf Systemen, die eine solche Möglichkeit nicht bieten, wird der Rückgabewert ignoriert, aber das macht "void main()" nicht zu legalem C++ oder legalem C. Selbst wenn Ihr Compiler "void main()" akzeptiert, vermeiden Sie es oder riskieren Sie, von C- und C++-Programmierern als unwissend angesehen zu werden.
In C++ muss main() keine ausdrückliche Rückgabeanweisung enthalten. In diesem Fall ist der zurückgegebene Wert 0, was eine erfolgreiche Ausführung bedeutet. Zum Beispiel:
#include<iostream>
int main()
{
std::cout << "This program returns the integer value 0\n";
}
Beachten Sie auch, dass es weder in ISO C++ noch in C99 erlaubt ist, den Typ in einer Deklaration wegzulassen. Das heißt, im Gegensatz zu C89 und ARM C++ wird "int" nicht angenommen, wenn ein Typ in einer Deklaration fehlt. Daraus folgt:
#include<iostream>
main() { /* ... */ }
ist ein Fehler, weil der Rückgabetyp von main() fehlt.
Quelle: http://www2.research.att.com/~bs/bs_faq2.html#void-main
Einige Betriebssysteme erwarten von Prozessen einen ganzzahligen Rückgabewert. Deklarieren Sie main so, dass es einen int zurückgibt. Wenn Sie sich nicht für den Wert interessieren, geben Sie einfach 0 zurück.
Aus den comp.lang.c FAQ:
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Was ist das Problem mit int void() { return 0;}; ?
1 Stimmen
Dasselbe wie [ verbietet der C++-Standard den Prototyp void main()? ]( stackoverflow.com/questions/1915659/ ).
2 Stimmen
Die bessere Frage ist, warum du blutiges C++ verwendest ;)
2 Stimmen
Warum versuchen Sie, die
void main()?
Es ist nichtvoid
ist esint
. Genau so ist es. Sie werden den Unterschied nicht einmal bemerken, da Sie ohnehin keinen expliziten Rückgabewert benötigen.0 Stimmen
Wenn das Ihr einziges Problem mit der Sprache ist, haben Sie sie nicht genug benutzt. Die meisten willkürlichen Entscheidungen laufen darauf hinaus: So war es einfacher.
1 Stimmen
@Max: und es ist die einzige Funktion mit nicht-void return, die die return-Anweisung weglassen kann! also
int main(){}
ist sogar um ein Zeichen kürzer!0 Stimmen
Der Mythos der
void main()
scheint von Herbert Schildts berüchtigten Schriften über C übernommen worden zu sein, vor allem in dem kommentierten Standard, wo die Anmerkungen behaupten, dass es erlaubt ist, direkt neben dem Teil des Standards, der es nicht erlaubt.