Maarks Δημοσ. 16 Δεκεμβρίου 2012 Μέλος Δημοσ. 16 Δεκεμβρίου 2012 μαλιστα,ευχαριστω πολυ για τις διορθωσεις!! επισης,καποες αποριες: αυτο > Game player = { // .choice .counter '\0', 0 }; δεν μπορω να πω οτι το κατανοω. αυτη η γραμμη δηλαδη >'\0', 0 τι κανει? το extern εδω? >extern char wordlist[MAX_WORDS]; τι κανει? και τελος αυτο που χρησιμευει? > if ( !player ) // sanity check return FALSE;
migf1 Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 μαλιστα,ευχαριστω πολυ για τις διορθωσεις!! Τίποτα βρε συ, να 'σαι καλα. επισης,καποες αποριες: αυτο > Game player = { // .choice .counter '\0', 0 }; δεν μπορω να πω οτι το κατανοω. αυτη η γραμμη δηλαδη >'\0', 0 τι κανει? Αυτό απλώς αρχικοποιεί τα πεδία της μεταβλητής player, σε player.choice = '\0' και player.counter = 0. Συμπτυγμένο ίσως είναι πιο κατανοητό... > Game player = { '\0', 0 }; Από C99 και μετά μπορείς να γράφεις και τα πεδία του struct, με τελείες μπροστά, οπότε g;inetaiπολύ πιο ευανάγνωστο... > Game player = {.choice = '\0', .counter = 0 }; το extern εδω? >extern char wordlist[MAX_WORDS]; τι κανει? Στην C το κάθε πηγαίο αρχείο ονομάζεται "file module". Οπότε όταν έχεις τον κώδικα σπασμένο σε διάφορα αρχεία, έχεις πολλά "file modules". Τώρα, αν σε καποιο file-module ορίσεις μια καθολική μεταβλητή (όπως ορίζουμε στο παράδειγμά μας την: char wordlist[MAX_WORDS]; στο file-module main.c) τότε μπορείς να την χρησμοποιήσεις και σε άλλα modules. Βάζοντας στα άλλα modules το keyword extern μπροστά από την δήλωση της μεταβλητής, το κάνεις σαφές (δηλώνεις) πως η μεταβλητή είναι εξωτερική για το συγκεκριμένο file-module και απλώς θα την χρησιμοποιήσεις...μπορείς και να της αλλάξεις και τιμή, αλλά δεν μπορείς να την ξανα-ορίσεις (ο ορισμός γίνεται μόνο μια φορά ). και τελος αυτο που χρησιμευει? > if ( !player ) // sanity check return FALSE; Στην περίπτωση που έστω και κατά λάθος καλέσεις την συνάρτηση validate_choice() με NULL ως όρισμα, δεν θα κρασάρει το πρόγραμμά σου. Τώρα αυτό δεν είναι απαραίτητα καλό, διότι πολύ συχνά τα κρασαρίσματα μας βοηθάνε στο debugging για να εντοπίσουμε που περίπου (ή που ακριβώς) έχουμε κάνει... μαμαμκια Από την άλλη, σε release έκδοση του προγράμματός μας, το τελευταίο που θέλουμε να συμβεί στον πελάτη μας είναι να κρασάρει το πρόγραμμά μας (και πιθανότατα να οδηγήσει και σε data loss). Οπότε τα sanity checks, δεν τα αφήνουμε σκέτα όπως το έχω εγώ στο παραάδειγμα. Ενσωματώνουμε και τουλάχιστον το τύπωμα ενος περιγραφικού error-message (συνήθως με αναφορά στο αρχείο, τη συνάρτηση και τη γραμμή που προκύπτει το σφάλμα) ώστε να μας ενημερώσει ο πελάτης και να το εντοπίσουμε άμεσα. Προφανώς αν κάνει fail κάποιο sanity check, θα πρέπει να έχουμε μεριμνήσει να κάνει κάποιου είδους safe recovery το πρόγραμμά μας (αν χρειάζεται,γιατί αρκετές φορές αρκεί απλώς να κάνουμε catch το σφάλμα) .
Maarks Δημοσ. 16 Δεκεμβρίου 2012 Μέλος Δημοσ. 16 Δεκεμβρίου 2012 μαλιστα σε ευχαριστω πολυ για τις αναλυτικες και πολυ καλες εξηγησεις σου!! μου ελυσες πολλες αποριες και μου εμαθες και ορισμενα πραγματα παραπανω!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα