EXIT_SUCCESS



  • Bringt es vorteile wenn ich beim return von main EXIT_SUCCESS verwenden anstatt 0?? hab das mit EXIT_SUCCESS jetzt paar mal gesehen aber weis halt nicht was genau das bringt.



  • das ist wurscht.
    0 und EXIT_SUCCESS sagen beide dem 'host environment', dass kein fehler passiert ist, wobei aber 0 nicht dasselbe sein muss wie EXIT_SUCCESS...
    🙂



  • --- ten du regst mich auf. SCHREIB LANGSAMER!
    😉 Schon das 2. Mal heute



  • modified schrieb:

    hab das mit EXIT_SUCCESS jetzt paar mal gesehen aber weis halt nicht was genau das bringt.

    Kurz gesagt: Größere Chancen auf problemlose Portierbarkeit.

    Greetz, Swordfish



  • Swordfish schrieb:

    modified schrieb:

    hab das mit EXIT_SUCCESS jetzt paar mal gesehen aber weis halt nicht was genau das bringt.

    Kurz gesagt: Größere Chancen auf problemlose Portierbarkeit.

    Das wage ich zu bezweifeln. Ein standardkonformer Compiler kann beides, ein nicht-konformer Uralt-Compiler wird wohl eher EXIT_SUCCESS nicht kennen als dass er return 0 falsch behandelt.



  • Bashar schrieb:

    Ein standardkonformer Compiler kann beides, ein nicht-konformer Uralt-Compiler wird wohl eher EXIT_SUCCESS nicht kennen als dass er return 0 falsch behandelt.

    [DISCLAIMER:PORTABILITY] Wenn ich von Portabilität spreche, beachte ich keine "nicht-konformen Uralt-Compiler" [/DISCLAIMER:PORTABILITY]

    Aber wie wär's mit

    port.h:

    #ifndef EXIT_SUCCESS
    #define EXIT_SUCCESS 0
    #define EXIT_FAILURE 1
    #endif
    

    für Deine "nicht-konformen Uralt-Compiler"? ; )

    Greetz, Swordfish



  • --- ten du regst mich auf. SCHREIB LANGSAMER!
    Schon das 2. Mal heute

    So, das muss ich jetzt loswerden. Hier die Gründe, warum ten so schnell ist:

    mikey schrieb:

    Sag mal ten, wie bekommst du nur in so einer kurzen Zeit so viele Beiträge zusammen ?? Das ist ja irre !

    ten schrieb:
    das hat verschiedene gründe...
    1. ich sitze zu oft vor computern mit internetverbindung
    2. ich clicke und schreibe ziemlich schnell (deshalb auch immer klein)
    3. irgendwie muss ich hier auf fast jeden mist antworten
    4. ich wär' lieber chatter als forenuser

    btw: mein alter account hatte 4000+ beiträge. das war mir entschieden zuviel.
    wenn der hier mal so weit ist, nehme ich 'nen neuen...

    😉



  • Swordfish schrieb:

    Wenn ich von Portabilität spreche, beachte ich keine "nicht-konformen Uralt-Compiler"

    Sondern nicht-konforme Nagelneu-Compiler? Da gilt doch das gleiche.

    port.h:

    #ifndef EXIT_SUCCESS
    #define EXIT_SUCCESS 0
    #define EXIT_FAILURE 1
    #endif
    

    Und dann ist return EXIT_SUCCESS portabler als return 0? Will mir immer noch nicht in den Kopf. return 0 heißt schon seit Anfang der Zeiten "Erfolgreich beendet". Es braucht schon bösartige Absichten auf Seiten des Compilerentwicklers, dass das nicht funktioniert. EXIT_SUCCESS dagegen ist eine spätere Idee von irgendwelchen ANSI-Heinis, die ein Implementor einfach vergessen haben kann, weil es eh fast niemand nutzt.



  • Ich hab gelesen, dass return 0 auf nicht allen System ein ordnungsgemäßes Ende des Programms bedeutet.
    EXIT_SUCCESS gibt dagegen immer den Wert an das Betriebssystem zurück, der für ein ordnungsgemäßes Ende steht (auch wenn dieser nicht 0 ist).



  • Naja, aber EXIT_SUCCESS ist ja ein normales define. Deswegen sehe ich keinen Grund darin, dass es immer den ordnungsgemäßen Wert des OS zurückgibt ....

    MfG mikey.



  • Simonek schrieb:

    Ich hab gelesen, dass return 0 auf nicht allen System ein ordnungsgemäßes Ende des Programms bedeutet.

    Ja, es steht IMVHO nirgends geschirben, dass jedes OS bei einem Prozessende 0 als Signal für "alles ok" verstehen soll. Eben deswegen gab's ja diesen ANSI-Heini (O Ton Bashar 😉 ), der sich gedacht hat, ein Symbol für "alles ok" wär' nicht verkehrt.

    Simonek schrieb:

    EXIT_SUCCESS gibt dagegen immer den Wert an das Betriebssystem zurück, der für ein ordnungsgemäßes Ende steht (auch wenn dieser nicht 0 ist).

    Ja, soweit die graue Theorie... Aber wie Bashar schon eingebracht hat: Nur wenn der Compiler EXIT_SUCCESS definiert. Willst Du wirklich portabel sein, so nimm entweder return 0; (Rückmeldung eines erfolgreichen Endes nicht garantiert) oder stelle sicher, dass auf jeder Platform, für die Dein Programm verfügbar sein soll, ein Compiler existiert der
    a) EXIT_SUCCESS definiert
    b) sich an einem #define EXIT_SUCCESS 0 nicht stört.

    @Bashar: Ich hab' nicht behauptet, dass EXIT_SUCCESS das gelbe vom Ei ist...

    Greetz, Swordfish



  • Es gibt tatsächlich Systeme, bei denen der Rückgabecode 0 nicht "Alles OK" bedeutet. Aber Achtung: Das heißt nicht, dass return 0 nicht trotzdem "Alles OK" bedeuten kann. Compilerbauer müssen auf solchen Plattformen halt dafür sorgen, dass die Anweisung return 0; in entsprechende Systemaufrufe, die fehlerfreies Beenden signalisieren, umgesetzt wird (bzlg. des Nullpointers besteht da übrigens eine vergleichbare Situation.)
    Sowas kann man zwar auch vergessen, aber da C-Programmierer schon immer gewohnt sind, fehlerfreies Beenden durch return 0 anzuzeigen, würde so ein Compiler wahrscheinlich nicht gerade große Akzeptanz bei den Kunden finden.

    (Ganz abgesehen davon natürlich, dass es so im Standard spezifiziert ist, aber wenn alle Compiler konform wären, hätten wir die Diskussion ja nicht.)



  • Das find' ich aber, wie soll ich's sagen!? Krank!? Ich rekapituliere:

    Es gibt (real) Compiler für irgendwelche Platformen (welche?), welche ein return 0; - sofern es innerhalb von main( ) auftritt, als return 42; (Hausnummer) compilieren?



  • Swordfish schrieb:

    Es gibt (real) Compiler für irgendwelche Platformen (welche?), welche ein return 0; - sofern es innerhalb von main( ) auftritt, als return 42; (Hausnummer) compilieren?

    Jep. VMS hat wohl ein ziemlich kompliziertes Exit-Code-System, indem die Schwere des Fehlers und noch einiges mehr genau festgelegt ist. 0 heißt dort nicht "Erfolg".


Anmelden zum Antworten