Star_Light Δημοσ. 14 Ιουλίου 2012 Δημοσ. 14 Ιουλίου 2012 Όλοι δίκιο είχαμε στο συγκεκριμένο μπέρδεμα (η βασική διαφοροποίηση ήταν ο βαθμός ειρωνείας που επέλεξε ο καθένας για να υπερασπιστεί το δίκιο του). Με λίγα λόγια πάντως, για όποιον θέλει έναν απλό κανόνα για να κάνει τη δουλειά του χωρίς να χρειάζεται να ανατρέχει σε εγχειρίδια κάθε 3 και λίγο (rule of thumb) είναι πως όπου μπαίνει το keyword static τότε η διαθεσιμότητα του οτιδήποτε ακολουθεί το static περιορίζεται/εκτείνεται στο τρέχον αρχείο και μόνο (είτε πρόκειται για μεταβλητή, είτε για συνάρτηση). Οτιδήποτε global είναι διαθέσιμο και σε άλλα αρχεία, με χρήση του keyword extern (το οποίο συχνά είναι προ-αιρετικό, αλλά βάζετέ το για να είστε παντού καλυμένοι). Ελα , αργοπορησα λιγο γιατι ειμαι και στρατευμένος ... Προφανώς ο King δεν αναφέρει ακομη οτι ένα προγραμμα μπορει να βρίσκεται σε επιμέρους αρχεία για αυτο και το προγραμμα που βρισκεται σε ενα μονο αρχειο και φέρει global μεταβλητες μέσα ορίζει οτι αυτες θα έχουν file scope. Και αν το καλοσκεφτεις εχει λογικη αυτο γιατι ως τωρα οι κωδικες προγραμματων που παραθετει βρισκονται σε ενα και μονο αρχειο , οι κωδικες δεν ειναι αφενος μεγαλοι και αφετερου δεν εχει μπει ακομη καν στην οργανωση ενος μεγαλου C προγραμματος. Οι ορισμοι ειναι ισοδυναμοι αν το προγραμμα εκτεινεται μονο σε ένα αρχειο. ΕΠισης σε αυτο εδω το βιβλιο Στη σελ. 271 υπάρχει λάθος. Ο χρονος ζωής μιας static δεν ειναι προσωρινός...
migf1 Δημοσ. 14 Ιουλίου 2012 Δημοσ. 14 Ιουλίου 2012 ... ΕΠισης σε αυτο εδω το βιβλιο Στη σελ. 271 υπάρχει λάθος. Ο χρονος ζωής μιας static δεν ειναι προσωρινός... Βασικά, εξαρτάται κι από το context στο οποίο αναφέρεται (καθώς και για το τι έχει καλύψει μέχρι εκείνη τη στιγμή). Τεχνικά τα static έχουν μόνιμο storage-duration καθόλη τη διάρκεια του προγράμματος, αλλά το scope τους περιορίζεται στο τρέχον μπλοκ (μπλοκ = αρχείο αν μιλάμε για global var/function, συνάρτηση αν μιλάμε για local var). Για να έχουν global scope πρέπει να είναι non-static globals και στα υπόλοιπα αρχεία να δηλώνονται προαιρετικά με το keyword extern. Ακόμα κι έτσι όμως σε τυχόν επικαλύψεις ονομασιών των extern από local, τότε υπερισχύουν τα local. Εδώ ένα αρκετά χρήσιμο link για τα storage-classes: http://www.tenouk.com/ModuleZ.html
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα