Δημοσιεύτηκε: 13 Ιουν 2011, 22:31
από simosx
migf1 έγραψε:Μπορεί, αλλά το return δεν κάνει cleanup. Το ANSI standard επιβάλει η main() να τερματίζει με exit() γιατί η exit() κάνει cleanup τυχόν αμέλειες του προγραμματιστή πριν επιστρέψει στο OS (π.χ. κλείνει ανοιχτά αρχεία, καθαρίζει μνήμες, κλπ)


Η return είναι που προκαλεί να κλείσουν ανοιχτά αρχεία, και έχει μεγαλύτερο νόημα σε C++ όπου τα αντικείμενα καλούν τον αποδομητή (destructor) στο return.
Αν εκτελέσεις exit(), τότε η εφαρμογή παύει άμεσα να λειτουργεί.

Για τη διαχείριση της μνήμης, ό,τι μνήμη έχει δεσμευθεί σε ένα πρόγραμμα επιστρέφει στο σύστημα κατά τον τερματισμό. Εξαίρεση είναι όταν η εφαρμογή γίνει ζόμπι.

Δες περισσότερα π.χ. στο http://stackoverflow.com/questions/4614 ... it-in-main

Μπορείς να δώσεις σύνδεσμο προς το ANSI C όπου περιγράφει τα παραπάνω; Υποψιάζομαι ότι η συμπεριφορά της exit() που αναφέρεις σχετίζεται με ιδιαιτερότητα συγκεκριμένων μεταγλωττιστών (π.χ. για ενσωματωμένα συστήματα), και όχι για GCC.

Μπορείς να δοκιμάσεις με ένα πρόγραμμα-δείγμα που ανοίγει αρχεία και δεσμεύει μνήμη. Με μεταγλώττιση με gcc -S μπορείς να δεις τον παραγόμενο κώδικα σε γλώσσα μηχανής, και να εντοπίσεις αν πραγματικά η exit() κάνει κάτι περισσότερο.