C πρότυπη βιβλιοθήκη
Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Η C πρότυπη βιβλιοθήκη είναι μια πρότυπη(στάνταρ) συλλογή από αρχεία επικεφαλίδες και συναρτήσεις βιβλιοθήκης που υλοποιούν κάποιες κοινές λειτουργίες, όπως είσοδος/έξοδος και χειρισμό αλφαριθμητικών , στην C (γλώσσα προγραμματισμού). Σε αντίθεση με άλλες γλώσσες όπως οι COBOL, Fortran, και PL/I, η C δεν περιλαμβάνει ενσματωμένεςς δεσμευμένες λέξεις για αυτές τις λειτουργίες , και γι'αυτό σχεδόν όλα τα προγράμματα γραμμένα στη C βασίζονται στην πρότυπη βιβλιοθήκη για να λειτουργήσουν.
Πίνακας περιεχομένων |
[Επεξεργασία] Σχεδίαση
Τα βασικά χαρακτηριστικά κάθε συνάρτησης ( όνομα , τύπος παραμέτρων , τύπος αποτελέσματος επιστροφής ) περιλαμβάνονται σε ένα αρχείο που καλείται αρχείο επικεφαλίδα, αλλά η υλοποίηση των συναρτήσεων αυτών είμαι χωριστά σε ένα αρχείο βιβλιοθήκης. Τα ονόματα αυτών των αρχείων-επικεφαλίδων της πρότυπης βιβλιοθήκης έχουν πλέον τυποποιηθεί αλλά όχι και η οργάνωση των βιβλιοθηκών της. Η πρότυπη βιβλιοθήκη παρέχεται συνήθως μαζί με τον μεταγλωττιστή. Όμως επειδή οι μεταγλωττιστές της C παρέχουν συχνά και επιπλέον λειτουργίες που δεν καθορίζονται στο πρότυπο ANSI C, οι πρότυπες βιβλιοθήκες των διαφόρων μεταγλωττιστών εμφανίζουν διαφορές μεταξύ τους.
[Επεξεργασία] Ιστορία
Η γλώσσα προγραμματισμού C, πριν δημιουργηθεί κάποια πρότυπη μορφή της, δεν παρείχε ενσωματωμένες λειτουργίες όπως λειτουργίες Ε/Ε . Με τον καιρό οι κοινότητες χρηστών της C αντάλλασαν μεταξύ τους ιδέες και υλοποιήσεις γι'αυτό που πλέον καλούμε C πρότυπη βιβλιοθήκη προκειμένου να παρέχεται αυτή η λειτουργικότητα που έλλειπε. Πολλές από αυτές τις ιδέες ενσωματώθηκαν τελικά στον ορισμό του προτύπου της γλώσσα προγραμματισμού C .
Το Unix και η γλώσσα προγραμματισμού C δημιουργήθηκαν στα εργαστήρια της AT&T Bell στα τέλη της δεκαετίας 1960 και στις αρχές τις δεκαετίας 1970. Κατά την δεκαετία του 1970 η γλώσσα προγραμματισμού C έγινε πολύ δημοφιλής.Πολλά πανεπιστήμια και οργανισμοί άρχισαν να δημιουργούν δικές τους παραλλαγές της γλώσσας για τα δικά τους εγχειρήματα. Στις αρχές της δεκαετίας του 1980 άρχισαν να γίνονται εμφανή τα προβλήματα συμβατότητας που παρουσίαζαν οι διάφορες υλοποιήσεις μεταξύ τους. Το 1983 η Αμερικανικός Εθνικός Οργανισμός Τυποποίησης (ANSI) δημιούργησε μια επιτροπή για να δημιουργήσει μια στάνταρ εκδοχή της γλώσσας που έγινε γνωστή σαν "ANSI C". Αυτή η εργασία κορυφώθηκε με την δημιουργία του αποκαλούμενου C89 στάνταρ το 1989. Μέρος του προτύπου που προέκυψε ήταν και ένα σύνολο βιβλιοθηκών που καλείται ANSI C πρότυπη βιβλιοθήκη.
Μετέπειτα αναθεωρήσεις του προτύπου της C πρόσθεσαν αρκετά νέα αρχεία επικεφαλίδες στην βιβλιοθήκη. Η υποστήριξη γι'αυτές τις επεκτάσεις διαφέρει από υλοποίηση σε υλοποίηση.
Τα αρχεία επικεφαλίδες <iso646.h>, <wchar.h>, και <wctype.h> προστέθηκαν με το Κανονιστική τροποποίηση 1 (Normative Amendment 1) (NA1), που αποτελούσε προσθήκη στο πρότυπο της C που επικυρώθηκε το 1995.
Τα αρχεία επικεφαλίδες <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h>, και <tgmath.h> προστέθηκαν με το στάνταρ C99, που ήταν μια αναθεώρηση του προτύπου της C που δημοσιεύθηκε το 1999.
[Επεξεργασία] ANSI πρότυπο
Η ANSI C πρότυπη βιβλιοθήκη αποτελείται από 24 αρχεία επικεφαλίδες της C που μπορούν αν περιληφθούν στο εγχείρημα ενός προγραμματιστή με μια εντολή. Κάθε αρχείο επικεφαλίδα περιέχει δηλώσεις συναρτήσεων , ορισμούς τύπων και μακροεντολές. Το περιεχομενό τους περιγράφεται παρακάτω.
Σε σύγκριση με άλλες γλώσσες πχ Java η πρότυπη βιβλιοθήκη είναι μικροσκοπική. Παρέχει ένα βασικό σύνολο μαθηματικών συναρτήσεων , χειρισμό αλφαριθμητικών , μετατροπές τύπων, και είσοδο έξοδο (βασισμένο σε κονσόλα). Δεν περιέχει ένα στάνταρ σετ από "εμπεριέχωντες τύπους" "container types" όπως η Στάνταρ βιβλιοθήκη πρότυπων της C++ ,πόσο μάλλον υποστήριξη για πλήρες κιτ εργαλείων γραφικής διασύνδεσης χρήστη(GUI) , δίκτυα, και αφθονία επιπλέον λειτουργιών που περέχει πχ η Java σαν στάνταρ. Το κύριο πλεονέκτημα μιας τόσο μικρής πρότυπης βιβλιοθήκης είναι ότι είναι ποιό εύκολο να δημιουργηθεί και να σου παρεχθεί ένα λειτουργικό ANSI C περιβάλλον από τι σε άλλες γλώσσες, και συνεπώς είναι ποιό εύκολο να μεταφέρεις την C σε νέες πλατφόρμες.
Πολλές βιβλιοθήκες έχουν αναπτυχθεί για να περέχουν αυτή την επιπλέον λειτουργηκότητα που λείπει από την πρότυπη βιβλιοθήκη της C. Πχ το εγχείρημα ανάπτυξης περιβάλλοντος επιφάνειας εργασίας GNOME έχει αναπτύξει το κιτ εργαλείων γραφικών GTK+ και την GLib, μια βιβλιοθήκη από εμπεριέχων δομές δεδομένων. Η ποικιλία των διαθέσιμων βιβλιοθηκών συνεπάγεται την αξία αυτών που έχουν επικρατήσει μέσω μιας διαδικασίας εξονυχιστικής επιλογής. Το μειονέκτημα όμως αυτής της πληθώρας βιβλιοθηκών είναι ότι παρουσιάζονται ασυμβατότητες όταν χρησιμοποιούνται στο ίδιο πρόγραμμα, και δυσχερένεται η συνεργασία μεταξύ των προγραμματιστών αφού γνωρίζουν διαφορετικές βιβλιοθήκες.
[Επεξεργασία] ANSI C βιβλιοθήκη - αρχεία επικεφαλίδες
<assert.h> | Περιέχει τις διαγνωστικές μακροεντολές που βοηθούνε στην αποσφαλμάτωση ενός προγράμματος |
<complex.h> | Έαν σύνολο από συναρτήσεις για χειρισμό φανταστικοί αριθμοί. (νέο με το C99) |
<ctype.h> | Περιέχει συναρτήσεις για ταξινόμηση χαρακτήρων ανάλογα με τον τύπο τους ή για μετατροπή ανάμεσα σε κεφαλαία και μικρά με έναν τρόπο ανεξάρτητο του σύνόλου χαρακτήρων που χρησιμοποιείται (συνήθως ASCII η μια επεκτασή του) |
<errno.h> | Για έλεγχο κωδικών λαθών που αναφέρονται από τις συναρτήσεις των βιβλιοθηκών. |
<fenv.h> | Για έλεγχο του περιβάλλοντος κινητής υποδιαστολής . (νέο με το C99) |
<float.h> | Περιέχει ορισμένες σταθερές με τις συγκεκριμένες ανά υλοποίηση ιδιότητες
των ακέραιων τύπων, όπως την ελάχιστη διαφορά μεταξύ δυο αριθμών κινητής υποδιαστολής (_EPSILON), το μέγιστο πλήθος ψηφίων ακριβείας (_DIG) και το εύρος των αριθμών που μπορούν να αναπαραστηθούν (_MIN, _MAX). |
<inttypes.h> | Για ακριβή μετατροπή μεταξύ ακέραιων τύπων. (νέο με C99) |
<iso646.h> | Για προγραμματισμό στα σύνολα χαρακτήρων του προτύπου ISO 646. (νέο με NA1) |
<limits.h> | Περιέχει ορισμένες σταθερές με τις συγκεκριμένες ανά υλοποίηση ιδιότητες
των ακέραιων τύπων,όπως πχ το εύρος των αριθμών που μπορούν να αναπαραστηθούν από κάποιο ακέραιο τύπο (_MIN, _MAX). |
<locale.h> | Για επιλογή (τοπικών ρυθμίσεων)locale. |
<math.h> | Για υπολογισμό κοινών μαθηματικών συναρτήσεων. |
<setjmp.h> | Για δηλώσεις setjmp/longjmp που χρησιμοποιούνται για μη-τοπικά άλματα. |
<signal.h> | Για έλεγχο διαφόρων εξαιρετικών συνθηκών. |
<stdarg.h> | Για πρόσβαση σε ένα κυμαινόμενο πλήθος παραμέτρων που περνάνε σε μια συνάρτηση. |
<stdbool.h> | Για ένα λογικό τύπο δεδομένων. (νέο με C99) |
<stdint.h> | Για ορισμό διαφόρων ακέραιων τύπων. (νέο με C99) |
<stddef.h> | Για ορισμό χρήσιμων τύπων και μακροεντολών. |
<stdio.h> | Παρέχει δυνατότητες εισόδου εξόδου.Provides the core input and output capabilities of the C language. Περιέχει και την ξακουστή συνάρτησηprintf . |
<stdlib.h> | Για εκτέλεση διαφόρων λειτουργιών όπως μετατροπές, ψευδό-τυχαίους αριθμούς,δέσμευση μνήμης,
έλεγχος διεργασιών, περιβάλλον, αναζήτηση , ταξινόμηση και σήματα. |
<string.h> | Για χειρισμό αλφαρηθμητικών διαφόρων ειδών. |
<tgmath.h> | Για μαθηματικές συναρτήσεις γενικού τύπου. (νέο με C99) |
<time.h> | Για μετατροπή μεταξύ διαφόρων μορφών ημερομηνίας και ώρας. |
<wchar.h> | Για χειρισμό wide ρευμάτων και διαφόρων ειδών αλφαρηθμητικών που χρησιμοποιούνε wide χαρακτήρες - αημαντικό για την υποστήριξη πολλών γλωσσών. (New with NA1) |
<wctype.h> | Για ταξινόμηση wide χαρακτήρων. (νέο με το NA1) |
[Επεξεργασία] Η C πρότυπη βιβλιοθήκη στην C++
Η γλώσσα προγραμματισμού C++ περιλαμβάνει την λειτουργικότητα της ANSI C πρότυπης βιβλιοθήκης, αλλά επιφέρει πολλές τροποποιήσεις , όπως την αλλαγή των ονομάτων των αρχείων επικεφαλίδας από <xxx.h> σε <cxxx> (παρόλαυτά τα ονόματα στο στυλ της C είναι διαθέσιμα αν και δεν συνίσταται η χρήση τους), καθώς και η τοποθέτηση όλων των αναγνωριστικών στο std
χώρο ονομάτων(namespace)
[Επεξεργασία] Κοινές βιβλιοθήκες υποστήριξης
Αν και δεν είναι τυποποιημένες, τα C προγράμματα βασίζονται σε βιβλιοθήκες (χρόνου-εκτέλεσης(runtime)) συναρτήσεων που περιέχουν κώδικα που ο μεταγλωττιστής χρησιμοποιεί σε χρόνο-εκτέλεσης. Πχ ο κώδικας που αρχικοποιεί την διεργασία για το λειτουργικό σύστημα, πριν κληθεί η main()
,υλοποιείται από την C βιβλιοθήκη χρόνου-εκτέλεσης του κάθε μεταγλωττιστή.
Η C πρότυπη βιβλιοθήκη τεκμηριώνει μόνο πως οι συναρτήσεις που αναφέρονται σε αυτό το άρθρο είναι διαθέσιμες και πώς συμπεριφέρονται. Όμως επειδή κάποια συγκεκριμένη υλοποιήση ενός μεταγλωττιστή ίσως βασίζεται στην διαθεσιμότητα αυτών των συναρτήσεων (χρόνο-εκτέλεσης), επιπέδου υλοποίησης , είναι πιθανό αυτές οι ανά-προμηθευτή-συγκεκριμένες συναρτήσεις να "πακετάρονται" μαζί με την πρότυπη βιβλιοθήκη της C στην ίδια μονάδα , γιατί είναι πιθανό και για τις δυο να τις χρειαστεί κάποιο πρόγραμμα.
Αν και συχνά ,εξαιτίας αυτού του πακεταρίσματος,συγχέεται με την C πρότυπη βιβλιοθήκη , η C βιβλιοθήκη χρόνου-εκτέλεσης δεν είναι ένα τυποποιμένο μέρος της γλώσσας και διαφέρει ανά πωλητή.
[Επεξεργασία] Δείτε επίσης
- C++ πρότυπη βιβλιοθήκη
- GNU C βιβλιοθήκη
[Επεξεργασία] Βιβλιογραφία
- Brian W. Kernighan , Dennis M. Ritchie. Η γλώσσα προγραμματισμού C -ANSI C-", Κλειδάριθμος 1990 , Δεύτερη έκδοση.
[Επεξεργασία] Εξωτερικοί σύνδεσμοι
Μια αναλυτική περιγραφή των αρχείων επικεφαλίδων
- Οδηγός αναφοράς C πρότυπης βιβλιοθήκης
- Microsoft C Run-Time Libraries στο MSDN