tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1281
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    plex84 plex84 ist offline Grünschnabel
    Registriert seit
    Apr 2005
    Beiträge
    3
    Vermutlich eine ganz einfach zu beantwortende Frage, aber:

    Sollte ich am Ende von main() "return" oder "exit" verwenden? Ich habe in den Manualseiten zu exit(3) (Linux und OpenBSD) gelesen, dass exit(3) zuerst noch "aufräumt", bevor es das Programm beendet (offene Dateideskriptoren, etc.).

    Auf der anderen Seite habe ich gelesen, dass return und exit am Ende von main() das gleiche machen. Bin jetzt ein wenig verwirrt, da ich unter OpenBSD dieses Verhalten getestet habe. Ich habe dabei folgende Programme genutzt:

    Code :
    1
    2
    3
    4
    5
    
    int
    main(int argc, char *argv[])
    {
        return 0;
    }

    und

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    #include <stdlib.h>
     
    int
    main(int argc, char *argv[])
    {
        exit(0);
    }

    Das ganze habe ich dann mit "gcc -S exit.c" und "gcc -S return.c" in Assembler übersetzen lassen. Das Resultat war, dass es nicht der gleiche Code war, wie man annehmen müsste:

    "exit" hat die Stackprotection abgebrochen und hat das Programm sofort beendet, während "return" dafür sorgte, dass die Stackprotection die abschließende Überprüfung durchgeführt hat.

    Daher weiß ich nun überhaupt nicht weiter, wann ich exit(3) und wann ich return nutzen sollte. Ich hoffe, ihr könnt mir weiterhelfen.
     

  2. #2
    Konsumierer Konsumierer ist offline Mitglied Silber
    Registriert seit
    Jan 2004
    Beiträge
    84
    Laut C++ Norm müsste ein return 0 stehen.
     

  3. #3
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Wie Du schon selber festgestellt hast, ist es immer sauberer, das Programm mit 'return' aus der main-Funktion zu verlassen (So wie es in jeder Funktion sauberer ist, sie nur am Ende mit 'return' zu verlassen und nicht irgendwo zwischendrin). 'exit' würde ich, wenn überhaupt, nur in kleinen, überschaubaren Programmen verwenden, wenn irgendwo ein Fehler aufgetreten ist, der das Programm am Weiterarbeiten hindert.
     

  4. #4
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    Also return 0; ist die bessere Wahl, da mit exit das Programm sofort abgebrochen wird.
    Es wird kein reservierter Speicher mehr freigegeben und nichts geschlossen, exit ist also sehr "unsauber".

    Das hast du bei return nicht.


    mfg
    umbrasaxum
     

  5. #5
    MFC openGL MFC openGL ist offline Mitglied Brokat
    Registriert seit
    Oct 2004
    Beiträge
    483
    Zitat Zitat von umbrasaxum
    moin


    Also return 0; ist die bessere Wahl, da mit exit das Programm sofort abgebrochen wird.
    Es wird kein reservierter Speicher mehr freigegeben und nichts geschlossen, exit ist also sehr "unsauber".

    Das hast du bei return nicht.


    mfg
    umbrasaxum

    Vollkommen zustimmt !
     

  6. #6
    plex84 plex84 ist offline Grünschnabel
    Registriert seit
    Apr 2005
    Beiträge
    3
    Ich habe mal auf der tech-Mailingliste nachgefragt, dort wurde gesagt, dass
    für OpenBSD exit() bevorzugt wäre, da nach dem return dieses exit() sowieso
    aufgerufen wird. Jetzt kann das natürlich von System zu System unterschiedlich
    sein, ich habe mich noch nicht so um das "Drumherum" eines C-Programmes
    beschäftigt... Kann mir einer sagen, wie das unter Windows gehandhabt wird?
    Oder Linux, oder Mac OS, oder ...
     

  7. #7
    Avatar von Tasm-Devil
    Tasm-Devil Tasm-Devil ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Maxdorf
    Beiträge
    137
    ups flascher threat

    Posting löschen!
     
    C macht es einfach, sich in den Fuß zu schießen; C++ erschwert es, aber wenn man es tut, bläst es einem das ganze Bein weg." —Bjarne Stroustrup .-.-.-.-.-.-.
    „Ich habe mir immer gewünscht, dass mein Computer so einfach zu bedienen sein sollte wie mein Telefon. Mein Wunsch wurde wahr. Ich weiß nun nicht mehr, wie mein Telefon funktioniert.“ —Bjarne Stroustrup

  8. #8
    Registriert seit
    Apr 2002
    Ort
    Delmenhorst (Niedersachsen)
    Beiträge
    3.567
    moin


    Lösch ihn doch selbst


    mfg
    umbrasaxum
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. JSF "Komponenten dynamisch rendern" oder auch "die 'nächste' Seite beeinflussen"
    Von Wutklumpen im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 22.09.09, 13:51
  3. $_SERVER[DOCUMENT_ROOT] ';"; echo "blubber";exit;
    Von enne im Forum vB-Testforum
    Antworten: 0
    Letzter Beitrag: 23.07.09, 11:58
  4. "Windows Server 2003" oder "Widnows Small Business"
    Von flukas im Forum Microsoft Windows
    Antworten: 6
    Letzter Beitrag: 07.07.08, 08:15
  5. Antworten: 2
    Letzter Beitrag: 05.01.05, 04:07