Spielt es eine Rolle, wie ich das deklariere main
Funktion in einem C++ (oder C) Programm?
Unterschied zwischen void main und int main in C/C++? [duplicate]
Kredns
Alan
Der Unterschied besteht darin, dass man es richtig definiert main
und der andere nicht.
Und ja, es spielt eine Rolle. Entweder
int main(int argc, char** argv)
oder
int main()
sind die richtige Definition von Ihnen main
gemäß der C++-Spezifikation.
void main(int argc, char** argv)
ist und war, IIRC, keine Perversität, die mit älteren C++-Compilern von Microsoft einherging.
-
int main(void) ist auch richtig
– Trient
12. März 2009 um 0:02 Uhr
-
Obwohl das in Ordnung ist, denke ich, dass int main() int main(void) vorgezogen wird.
– Alan
12. März 2009 um 0:09 Uhr
Objekt
Bjarne Stroustrup machte das ganz deutlich:
Die Definition
void main()
ist und war nie C++, noch war es C.
Sehen Hinweis.
RedBlueThing
Du solltest benutzen int main
. Sowohl der C- als auch der C++-Standard legen dies fest main
sollte einen Wert zurückgeben.
Jo
Für C++ ist nur int erlaubt. Für C sagt C99, dass nur int erlaubt ist. Der vorherige Standard erlaubte a void
Rückkehr.
Kurz gesagt, immer int
.
Der Punkt ist, dass C-Programme (und C++ das gleiche) immer (sollten?) einen Erfolgswert oder Fehlercode zurückgeben, also sollten sie so deklariert werden.
-
Jawohl? Und wer wird diesen Rückgabecode in Ihrem Marsrover-Bare-Metal-Gerät verwenden? 🙂
– BitTickler
19. Januar 2020 um 3:08 Uhr
-
Das ist eine nützliche Frage – als Zen-Koan.
– Svante
19. Januar 2020 um 18:14 Uhr
X-Istence
Vor langer Zeit fand ich diese Seite (void main(void)) die viele Gründe außerhalb des Arguments “der Standard sagt, dass es nicht gültig ist” enthielt. Auf bestimmten Betriebssystemen/Architekturen kann dies dazu führen, dass der Stack beschädigt wird und/oder andere unangenehme Dinge passieren.
-
Jawohl? Und wer wird diesen Rückgabecode in Ihrem Marsrover-Bare-Metal-Gerät verwenden? 🙂
– BitTickler
19. Januar 2020 um 3:08 Uhr
-
Das ist eine nützliche Frage – als Zen-Koan.
– Svante
19. Januar 2020 um 18:14 Uhr
Azeem
Wenn Sie sich an die Spezifikation halten, sollten Sie immer deklarieren main
Rückkehr ein int
.
In Wirklichkeit lassen Sie die meisten Compiler jedoch mit beiden davonkommen. Der wirkliche Unterschied besteht also darin, ob Sie einen Wert an die Shell zurückgeben möchten / müssen.
-
Sie sollten immer versuchen, die Dinge „nach Spezifikation“ zu tun, es sei denn, es gibt einen zwingenden Grund, dies nicht zu tun. Zugegeben, viele Implementierungen erlauben void main und andere Erweiterungen. Dies bedeutet nicht, dass Sie sich auf implementierungsspezifische Erweiterungen verlassen sollten. In eingebetteten Anwendungen ohne Shell ist void main in Ordnung.
– Trient
12. März 2009 um 0:09 Uhr
-
Ich werde fortfahren und mit all dem einverstanden sein. Für eine Weile habe ich mir angewöhnt, void vs int als eine Art Psudo-Kommentar darüber zu verwenden, ob ich erwartet habe, einen Wert zurückzugeben, aber jetzt verwende ich einfach immer int.
– Elektronen_Ahoi
12. März 2009 um 0:17 Uhr
-
Warum ist es sinnvoll, das Falsche zu tun (was in manchen Fällen funktioniert), wenn das Richtige mehr Arbeit bedeutet?
– Tom
12. März 2009 um 3:31 Uhr
-
@Tom: weil… das Richtige mehr Arbeit war? Ich bin mir nicht sicher, ob der Satz korrekt analysiert wird.
– Elektronen_Ahoi
12. März 2009 um 5:52 Uhr
-
@Ahoi – Ich habe dort ein entscheidendes Wort verpasst … soll sagen: “… wenn das Richtige ist Nein mehr Arbeit”
– Tom
12. März 2009 um 12:30 Uhr