Δημοσιεύτηκε: 29 Μαρ 2012, 14:57
από migf1
Ilias95 έγραψε:
...
Αν διαφωνείς σε αυτό θα χαιρόμουν πολύ να ακούσω την άποψη σου.

Δεν είμαι σίγουρος αν συμφωνώ ή διαφωνώ, διότι υπάρχουν valid points και στις 2 απόψεις.

Σε αυτή που εξέφρασα εγώ το valid point είναι η αποφυγή κακών συνηθειών, για τις οποίες η ιστορία διδάσκει πως αν αυτοματοποιηθούν εξαρχής στο μυαλό όποιου μαθαίνει, τότε αυξάνονται δραματικά οι πιθανότητες να μεταφέρει έστω και μια από αυτές σε κώδικα παραγωγής (που αυτόματα σημαίνει bug).

Στη C το error-checking είναι κρίσιμης σημασίας, γιατί δεν έχει από πίσω της κάποιο managed framework να πιάνει (ενίοτε και να διορθώνει αυτόματα) run-time σφάλματα. Το βασικά από αυτά είναι:

α) τα memory leaks στη δυναμική διαχείριση μνήμης (δεν έχεις φτάσει ακόμα εκεί, αλλά εν πολλοίς σημαίνει "ορφανά" malloc()/calloc()/realloc(), δηλαδή χωρίς αντίστοιχα free() ).

β) τα λεγόμενα "dangling pointers" ή "wild pointers", τα οποία εν πολλοίς μεταφράζονται σε έλεγχο με NULL για ορίσματα συναρτήσεων που είναι δείκτες (καθώς και πάντα αρχικοποίηση σε NULL κατά τον ορισμό οποιουδήποτε δείκτη, string ή όχι).

γ) τα "bounding errors", που εν πολλοίς σημαίνει έλεγχοι ώστε οι indexers των arrays να μην ξεπερνάνε τα όρια του array, ούτε το πάνω (overflow) ούτε το κάτω (underflow)

δ) έλεγχοι για τα όρια των μεταβλητών που διαβάζουμε από την κύρια είσοδο

Αυτά τα 4 είναι τα βασικά, τα 3 εκ των οποίων βρίσκονται ήδη εντός ύλης σε όσα έχεις διαβάσει στο βιβλίο ;)

Το ιδανικό για μένα θα ήταν να φτιάξεις re-usable συναρτήσεις όπου είναι δυνατόν για τις παραπάνω κατηγορίες (όπως για παράδειγμα η mySCANF()) και να τις χρησιμοποιείς σε ΟΛΕΣ τις ασκήσεις που κάνεις. Με αυτό τον τρόπο ΔΕΝ σου εντυπώνονται κακές συνήθειες κατά τη διάρκεια της εκμάθησής σου ;)

ΥΓ. Για τον μετρητή, έχεις Windows να ανεβάσω το executable της λύσης, ώστε να δεις τι εννοώ;