Frage zu Return Werten



  • @Bashar

    §7.20.4.3/5

    Finally, control is returned to the host environment. If the value of status is zero or EXIT_SUCCESS, an implementation-defined form of the status successful termination is returned. If the value of status is EXIT_FAILURE, an implementation-defined form of the status unsuccessful termination is returned. Otherwise the status returned is implementation-defined.



  • Äh ja, das ist genau das was ich gesagt habe und was du verschwiegen hast, oder?



  • @Bashar ja. Wenn ich aber den picky-mode auspacke steht da nirgends, daß EXIT_SUCCESS gleich 0 sein muss ;p

    // ach so, sonst gilt natürlich die Faustregel. Linkshändler benutzen die linke Faust, Rechtshändler die rechte. Und auf jeden Fall: Je höher desto platsch.



  • @Swordfish sagte in Frage zu Return Werten:

    @Bashar ja. Wenn ich aber den picky-mode auspacke steht da nirgends, daß EXIT_SUCCESS gleich 0 sein muss ;p

    Ja, das steht da nicht, und das hat auch niemand behauptet.



  • @Bashar sagte in Frage zu Return Werten:

    dass ein Rückgabewert von 0 äquivalent zu EXIT_SUCCESS ist

    habe ich so interpretiert.



  • "Äquivalent" ist was anderes als "gleich". Was soll ich dazu noch sagen.



  • @Swordfish sagte in Frage zu Return Werten:

    habe ich so interpretiert.

    dub di dub. ich sage ja nicht, daß das schlau war ...



  • @Deuterium42 Lass dich von dem Rückgabewert der Main-Funktion nicht verunsichern. Sobald du beim Lernen soweit fortgeschritten bist, dass du mit Funktionen beginnst wirst du ganz schnell verstehen für was Rückgabewerte sinnvoll sind. Der Rückgabewert der Main-Funktion ist für die nächst höhere Ebene gedacht. Also die Anwendung, welche dein Programm aufruft. So wie es schon geschrieben wurde. Ein kleines Beispiel hilft dir vielleicht:
    Stell dir vor, du schreibst ein Programm (MeinProgramm.exe) . Das Programm soll .zip Dateien entpacken. Dein Programm bekommt den Dateiname als Parameter übergeben. Nun kannst du (bei Windows) eine Batch Datei schreiben. "MeinProgramm.exe -Pictures.zip". Mit deiner Batch kannst du mit einem Befehl überprüfen was MeinProgramm.exe zurück gegeben hat. Läuft alles durch kommt zum Schluss in MeinProgramm.exe return 0;. Deine Batchdatei bekommt jetzt die 0 und gibt aus "Alles gut gegangen". Nun stell dir vor du hast keine Pictures.zip in dem Verzeichnis. Dann kannst du diesen Fall in MeinProgramm.exe abfragen und sagen return 1; (Wenn du in der Main-Funktion return... schreibst, dann endet dein Programm an der Stelle und macht nicht weiter) Deine Batch bekommt jetzt die 1. Nun könnte die Batch ausgeben "Ein Fehler ist aufgetreten, MeinProgramm.exe wurde vorzeitig beendet!".

    Ich hoffe ich hab das nicht zu umständlich geschrieben 🙂



  • Auf UNIX/Linux Systemen gibt es eine ganze Reihe fest definierter Returncodes, so dass man dem aufrufendem Programm damit mehr nur als Fehler oder Erfolg signalisieren kann. Allgemein sollte man den Inhalt von errno.h kennen und für spezielle Dienste sysexit.h.



  • @Deuterium42 sagte in Frage zu Return Werten:

    Gebe ich damit selber an, ob mein Code (meiner Meinung nach) richtig arbeitet oder nicht?

    wenn du später eigene funktionen erstellst, kannst du damit fehler abfragen. da werte von 0 immer "false" sind und alle werte ungleich 0 immer "true" kannst du dir dann sowas bauen:

    int MeineFunktion()
    {
         if(MeineUnterfunktion1())
         {
              return 1;
         }
    
         if(MeineUnterfunktion2())
         {
              return 2;
         }
    
         //////////////////
    
        return 0;
    }
    
    int main()
    {
         int rc = MeineFunktion();
    
         if(rc)
         {
         switch(rc)
         {
              case 1:
              cout << "MeineUnterfunktion1 fehlgeschlagen" << endl;
              return 1;
              break;
    
              case 2:
              cout << "MeineUnterfunktion2 fehlgeschlagen" << endl;
              return 2;
              break;
         }
         }
    
         cout << "keine Fehler in MeineFunktion aufgetreten" << endl;
         return 0;
    }
    

    die rückgabewerte kannst du übrigens nicht nur in shellscripten auswerten, sondern auch in c- oder c++-programmen, wenn du denn die entsprechende betriebssystemfunktion aufrufst, aber bis dahin hast du noch so einiges zu tun.