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. Το κύριο πλεονέκτημα μιας τόσο μικρής πρότυπης βιβλιοθήκης είναι ότι καθιστά ευκολότερη τη μεταφορά της C σε νέες πλατφόρμες.
Πολλές βιβλιοθήκες έχουν αναπτυχθεί για να παρέχουν την επιπλέον λειτουργικότητα που λείπει από την πρότυπη βιβλιοθήκη της C. Για παράδειγμα, το εγχείρημα ανάπτυξης περιβάλλοντος επιφάνειας εργασίας GNOME έχει αναπτύξει το κιτ εργαλείων γραφικών GTK+ και την GLib, μια βιβλιοθήκη από εμπεριέχωντες δομές δεδομένων. Η ποικιλία των διαθέσιμων βιβλιοθηκών συνεπάγεται την αξία αυτών που έχουν επικρατήσει μέσω μιας διαδικασίας εξονυχιστικής επιλογής. Το μειονέκτημα όμως αυτής της πληθώρας βιβλιοθηκών είναι ότι παρουσιάζονται ασυμβατότητες όταν χρησιμοποιούνται στο ίδιο πρόγραμμα, και δυσχεραίνεται η συνεργασία μεταξύ των προγραμματιστών αφού γνωρίζουν διαφορετικές βιβλιοθήκες.

Η C πρότυπη βιβλιοθήκη στην C++

Η γλώσσα προγραμματισμού C++ περιλαμβάνει την λειτουργικότητα της ANSI C πρότυπης βιβλιοθήκης, αλλά επιφέρει πολλές τροποποιήσεις, όπως την αλλαγή των ονομάτων των αρχείων επικεφαλίδας από <xxx.h> σε <cxxx> (παρ'όλα αυτά τα ονόματα τύπου C είναι διαθέσιμα αν και δεν συνίσταται η χρήση τους), καθώς και την τοποθέτηση όλων των αναγνωριστικών στον χώρο ονομάτων (namespace) std.

Κοινές βιβλιοθήκες υποστήριξης

Αν και δεν είναι τυποποιημένες, τα C προγράμματα βασίζονται σε βιβλιοθήκες συναρτήσεων που περιέχουν κώδικα που ο μεταγλωττιστής χρησιμοποιεί σε χρόνο εκτέλεσης. Για παράδειγμα, ο κώδικας που αρχικοποιεί τη διεργασία για το λειτουργικό σύστημα, πριν κληθεί η βασική συνάρτηση main() ενός προγράμματος, υλοποιείται από την C βιβλιοθήκη χρόνου-εκτέλεσης του κάθε μεταγλωττιστή.
Η C πρότυπη βιβλιοθήκη τεκμηριώνει μόνο πως οι συναρτήσεις που αναφέρονται σε αυτό το άρθρο είναι διαθέσιμες και πώς συμπεριφέρονται. Όμως επειδή κάποια συγκεκριμένη υλοποίηση ενός μεταγλωττιστή ίσως βασίζεται στην διαθεσιμότητα αυτών των συναρτήσεων χρόνου εκτέλεσης, επιπέδου υλοποίησης, είναι πιθανό αυτές οι ανά προμηθευτή συγκεκριμένες συναρτήσεις να "πακετάρονται" μαζί με την πρότυπη βιβλιοθήκη της C στην ίδια μονάδα, γιατί είναι πιθανό και οι δύο να χρειαστούν σε κάποιο πρόγραμμα.
Αν και συχνά, εξαιτίας αυτής της σύζευξης, η βιβλιοθήκη χρόνου εκτέλεσης της C συγχέεται με την πρότυπη βιβλιοθήκη της C, δεν είναι τυποποιημένο μέρος της γλώσσας και διαφέρει ανά προμηθευτή.