ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
1281
1281
EMPFEHLEN
-
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.
-
11.05.05 15:05 #2
- Registriert seit
- Jan 2004
- Beiträge
- 84
Laut C++ Norm müsste ein return 0 stehen.
-
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.
-
11.05.05 15:10 #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
-
11.05.05 21:45 #5
- Registriert seit
- Oct 2004
- Beiträge
- 483
Zitat von umbrasaxum
Vollkommen zustimmt !
-
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 ...
-
12.05.05 22:42 #7
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
-
12.05.05 22:44 #8
- Registriert seit
- Apr 2002
- Ort
- Delmenhorst (Niedersachsen)
- Beiträge
- 3.567
moin
Lösch ihn doch selbst
mfg
umbrasaxum
Ähnliche Themen
-
Richtige Syntax bei Operatorüberladung, wann sind "friend", "const", "&" nötig?
Von mrs_schokokeks im Forum C/C++Antworten: 4Letzter Beitrag: 25.08.10, 19:13 -
JSF "Komponenten dynamisch rendern" oder auch "die 'nächste' Seite beeinflussen"
Von Wutklumpen im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 22.09.09, 13:51 -
$_SERVER[DOCUMENT_ROOT] ';"; echo "blubber";exit;
Von enne im Forum vB-TestforumAntworten: 0Letzter Beitrag: 23.07.09, 11:58 -
"Windows Server 2003" oder "Widnows Small Business"
Von flukas im Forum Microsoft WindowsAntworten: 6Letzter Beitrag: 07.07.08, 08:15 -
"verbesserter Alternativ-Ttext" oder "Text an Mauszeiger bei mouseover"
Von the snake II im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 05.01.05, 04:07





Zitieren
Login






