2 Stimmen

main kann nicht ungültig sein

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.

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

11voto

Prasoon Saurav Punkte 88056

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.

8voto

Sheldon L. Cooper Punkte 3130

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

4voto

gregg Punkte 1027

Weil der Standard besagt, dass er int.

1voto

Andy Thomas Punkte 81932

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.com

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.

Powered by:

X