Gast
#580721
Moin ! Wozu soll ich return 0; am Ende meines Programms mit hineinnehmen? Was bewirkt dieses ? Wäre nett, wenn mir jemand dies mal kurz erläutern würde! Ich programmiere in C / C++ ... Mfg Peter
|
Anzeige
|
Wozu return 0; im Programm ?
Gast
#580721
Moin ! Wozu soll ich return 0; am Ende meines Programms mit hineinnehmen? Was bewirkt dieses ? Wäre nett, wenn mir jemand dies mal kurz erläutern würde! Ich programmiere in C / C++ ... Mfg Peter Ist dein main() ist als int main(... ausgelegt, d.h. als Funktion, die einen int-Wert zurück gibt? Meckert (warnt) dein C-Compiler nicht, wenn die Funktion keinen Wert zurück gibt? Bei µC Anwendungen ist meist nicht vorgesehen, dass diese return Anweisung tatsächlich ausgeführt wird. Wohin soll das Programm auch zurückkehren - wer/was ist das aufrufende Programm? Daher spielt es auch keine Rolle welcher Wert dort steht return 0 oder return 42... return 0 kann aber in eine besonders kurze ASM-Instruktion übersetzt werden. Bei nicht µC Anwendungen benutzt man meist 0 für "kein Fehler" und andere Werte für einen Fehlercode. Die kurze Antwort ist: Weil es im C Standard für sog. 'hosted Environments' so vorgesehen ist. Ein hosted Environment ist salopp gesagt: Dein Programm läuft unter Kontrolle eines Betriebssystems. Für µC ergibt sich da ein Sonderfall: Eigntlich gibt es da meist kein Betriebssystem, welches deine main() aufruft und daher würde ein Returnwert keinen Sinn ergeben. Allerdings ist es ja nicht so dass die komplette Programmausführung beim main() startet. Auch wenn kein Betriebssystem vorhanden ist, so läuft doch vor dem main() zunächst mal die Initialisierungs- sequenz der C-Runtime ab, die verschiedene buchhalterische Dinge ins Laufen bringt und danach dein main() aufruft. Falls main() je zurückkommt, dann erwartet diese Initialisierungssequenz einen Returnwert, auch wenn sie nichts damit anfangen kann. D.h. mit einem Returntyp von int für main() bist du immer auf der sicheren Seite, es sei denn deine Compilerdoku sagt was anderes. Weiters gibt es für main() eine spezielle Regel in C. Der Compiler ist verpflichtet, wenn kein expliziter 'return' in main() vorkommt, sich selbst einen hinzuzudenken. D.h. der Compiler muss
akzeptieren und daraus für sich selbst
machen. Im C-Standard sind auch einige Konstanten definiert, die als Returnwert für main() immer zulässig sind. Diese sind: 0, EXIT_SUCCESS, EXIT_FAILURE. 0 und EXIT_SUCCESS sind gleichwertig.
ist also identisch zu den beiden obigen Code-Schnipseln. Darüber hinaus kann eine Implementierung natürlich noch andere Konstanten definieren, die dem Aufrufer (in der Regel das Betriebs- system) bestimmte Dinge signalisieren können. Meist wird der Returnwert aber einfach nur in der Betriebssystem-Shell (der Kommandozeile) in irgend einer Form zugänglich gemacht, damit dieser in Batch Dateien oder sontigen Skriptsprachen ausgewertet und weiterverarbeitet werden kann. Wie gesagt: Auf einem µC ist das nicht besonders relevant, da in der Regel kein Betriebssystem vorhanden ist, welches mit dem Returnwert etwas anfangen kann. Trotzdem ist es guter Stil sich einfach daran zu gewöhnen, dass main() einen int zurückliefert. Durch die main-return Sonderregelung ist das ja auch nicht mit einem besonderen Mehraufwand verbunden. In der Regel besteht das Main aufm MC aus einer Endlosschleife. Ein "return xx;" dahinter ist daher toter Code und wird nicht implementiert bzw. kann gleich weggelassen werden. Es ist sogar sinnvoll, es wegzulassen. Dann wird man nämlich angemeckert, sobald man die Mainloop vergißt. Peter und was wenn ich void main(void) schreibe?dürfte doch auch gehn oder? Benjamin Moll wrote:
> und was wenn ich void main(void) schreibe?dürfte doch auch gehn oder?
Dann bewegst du dich ausserhalb des C-Standards (es sei denn
deine Compilerdoku sagt explizit dass du das darfst).
Aber warum willst du das machen?
'int' ist doch um einen Buchstaben kürzer als 'void'. D.h.
du hast noch nicht mal mehr Tippaufwand.
es würde aber die diskussion über return 0 überflüssig machen ;) Benjamin Moll wrote:
> es würde aber die diskussion über return 0 überflüssig machen ;)
Es gibt keine Diskussion darüber :-)
Im C-Standard ist es so niedergeschrieben und der gilt.
Auch wenn Microsoft das jahrzehntelang in seinen Demoprogrammen
anders gemacht hat.
Gast
#581031
> es würde aber die diskussion über return 0 überflüssig machen ;)
Wenn die Leute es einfach akzeptieren würden, wäre auch jegliche
Diskussion überflüssig. Stattdessen sagen sie sich "das brauche ich
nicht", lassen es weg und meckern dann in irgendwelchen Foren darüber,
daß der Compiler eine Warnung ausspuckt.
Gast
#581148
Danke für Eure Beiträge !!! Mfg Peter
Beitrag #5653269 wurde von einem Moderator gelöscht.
Beitrag #5653270 wurde von einem Moderator gelöscht.
Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|