Unterschied zwischen void main und int main in C/C++? [duplicate]

Lesezeit: 3 Minuten

Unterschied zwischen void main und int main in CC duplicate
Kredns

Spielt es eine Rolle, wie ich das deklariere main Funktion in einem C++ (oder C) Programm?

Unterschied zwischen void main und int main in CC duplicate
Alan

Der Unterschied besteht darin, dass man es richtig definiert mainund 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.

https://isocpp.org/wiki/faq/newbie#main-returns-int

  • 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

1646800211 157 Unterschied zwischen void main und int main in CC duplicate
Objekt

Bjarne Stroustrup machte das ganz deutlich:

Die Definition void main() ist und war nie C++, noch war es C.

Sehen Hinweis.

1646800211 360 Unterschied zwischen void main und int main in CC duplicate
RedBlueThing

Du solltest benutzen int main. Sowohl der C- als auch der C++-Standard legen dies fest main sollte einen Wert zurückgeben.

1646800212 179 Unterschied zwischen void main und int main in CC duplicate
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

Unterschied zwischen void main und int main in CC duplicate
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

1646800213 580 Unterschied zwischen void main und int main in CC duplicate
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

980340cookie-checkUnterschied zwischen void main und int main in C/C++? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy