Το τρίτο μέρος (ΘΕΩΡΙΑ) έχει την οργάνωση ενός κλασικού βιβλίου που αναφέρεται στην γλώσσα προγραμματισμού C. Κάθε κεφάλαιο δίνει την αντίστοιχη θεωρία και περιέχει παραδείγματα για την κατανόηση των εννοιών. Το 3 ο μέρος αποτελείται από δέκα (10) κεφάλαια, τα 11-20.
Το Κεφάλαιο 11, με τίτλο “Συνθετικά, Δομή και Ανάπτυξη C Προγράμματος ”, αναφέρεται στη δομή ενός προγράμματος σε C και τα διάφορα στάδια από τα οποία περνά η ανάπτυξη ενός προγράμματος. Θεωρεί τον πηγαίο κώδικα ως ένα σύνολο προτάσεων τις οποίες κατατάσσει σε κατηγορίες ανάλογα με το χρόνο εκτέλεσης τους, διακρίνοντας τον χρόνο μεταγλώττισης (compile time), τον χρόνο φόρτωσης (load-time) και τον χρόνο εκτέλεσης (run-time). Υπογραμμίζει τη σημασία της Μηχανικής Λογισμικού (Software Engineering) στη διαδικασία ανάπτυξης λογισμικού, καθώς αυτή εστιάζει στις κρίσιμες φάσεις της Ανάλυσης και του Σχεδιασμού, που πρέπει να προηγούνται της φάσης της Υλοποίησης. Τέλος, περιγράφει το ρόλο και τη σύνταξη προτάσεων του προεπεξεργαστή της C.
Το Κεφάλαιο 12, με τίτλο “Λεξιλόγιο και Συντακτικό της C”, κάνει μια αναφορά στο Λεξιλόγιο της C και δίνει τις βασικές έννοιες του συντακτικού, καθώς η γνώση του λεξιλογίου και των συντακτικών κανόνων αποτελεί βασική προϋπόθεση για τη συγγραφή προγραμμάτων. Αναφέρει επίσης ορισμένους βασικούς κανόνες για δημιουργία ευανάγνωστου κώδικα.
Το Κεφάλαιο 13, με τίτλο “ Μεταβλητές, Σταθερές, Τύποι Δεδομένων”, εισάγει την έννοια της μεταβλητής σε συνδυασμό με την έννοια του τύπου δεδομένων που αποτελούν τα βασικά εργαλεία για την αναπαράσταση των δεδομένων που διαχειρίζονται τα προγράμματα. Παρουσιάζει τους βασικούς τύπους δεδομένων της C ως απαραίτητα εργαλεία για την οργάνωση και διαχείριση των διαφορετικών μορφών που μπορεί να έχει η πληροφορία. Παράλληλα, γίνεται εισαγωγή σε πίνακες, δείκτες, συμβολοσειρές, και απαριθμητικούς τύπους. Το κεφάλαιο ολοκληρώνεται με τη συζήτηση κρίσιμων εννοιών όπως η ορατότητα (scope) και η διάρκεια ζωής (lifetime) των μεταβλητών.
Το Κεφάλαιο 14, με τίτλο “Τελεστές, Εκφράσεις, Προτάσεις”, αποτελείται από πέντε ενότητες. Η πρώτη από αυτές παρουσιάζει τον τελεστή ως δομικό στοιχείο που χρησιμοποιείται για να αναπαραστήσει τις βασικές διεργασίες που η γλώσσα άμεσα υποστηρίζει. Η δεύτερη ενότητα αναφέρεται στους συμβολισμούς που οι γλώσσες χρησιμοποιούν για τον σχηματισμό εκφράσεων, καθώς και τον τρόπο υπολογισμού της τιμής της έκφρασης, εισάγοντας τους όρους της προτεραιότητας και προσεταιριστικότητας. Η τρίτη ενότητα αναφέρεται στο πολύ σημαντικό θέμα της μετατροπής τύπων και τον τρόπο που ο μηχανισμός μετατροπής τύπων διευκολύνει τη δημιουργία εκφράσεων από διαφορετικού τύπου τελεστέους. Η τέταρτη ενότητα εισάγει την έννοια της πρότασης κάνοντας μια σύντομη αναφορά στις προτάσεις του προεπεξεργαστή της C. Τέλος η πέμπτη ενότητα αναφέρεται στο πολύ πλούσιο σύνολο τελεστών που διαθέτει η C.
Το Κεφάλαιο 15 με τίτλο “Προτάσεις Ελέγχου Ροής”, εξετάζει γενικά και ανεξαρτήτως γλώσσας προγραμματισμού το θέμα της ρύθμισης της ροής εκτέλεσης του προγράμματος. Περιγράφει τις βασικές κατηγορίες προτάσεων που επιτρέπουν τη διαμόρφωση της, όταν αυτή διαφοροποιείται από την κλασσική ακολουθιακή. Στη συνέχεια, παρουσιάζει αναλυτικά τις προτάσεις ελέγχου ροής της C, δίνοντας για κάθε μια τον τρόπο χρήσης της και ενδεικτικά παραδείγματα.
Το Κεφάλαιο 16 με τίτλο “Συναρτήσεις και Οργάνωση Πηγαίου Κώδικα”, αναφέρεται στη συνάρτηση ως βασικής κατασκευής της γλώσσας για υποστήριξη της αφαιρετικότητας στις διεργασίες και δημιουργία αρθρωτού κώδικα. Επεξηγείτε ο μηχανισμός κλήσης συνάρτησης και οι τρόποι περάσματος ορισμάτων κατά τιμή και κατά αναφορά. Εισάγεται η έννοιας της αναδρομικότητας και εξετάζεται η οργάνωση προγράμματος σε περισσότερα από ένα αρχεία, χρησιμοποιώντας το κλασικό παράδειγμα του [K&R] που αναφέρεται στην αριθμομηχανή αντίστροφης Πολωνικής σημειογραφίας (RpnCalculator). Τέλος, γίνεται αναφορά στην τυπική βιβλιοθήκη της C.
Το Κεφάλαιο 17 με τίτλο “Δομές και Ενώσεις”, εξετάζει την κατασκευή της δομής (struct) ως εργαλείο για την υποστήριξη της αφαιρετικότητας στα δεδομένα. Παρουσιάζεται η δομή σε συνδυασμό με πίνακες, ως όρισμα και επιστρεφόμενη τιμή συνάρτησης, η σχέση της με τους Δείκτες και η χρήση της με την typedef για ορισμό νέων τύπων. Γίνεται μια αναφορά στις Ενώσεις που είναι μια ιδιαίτερη μορφή δομής για αποδοτικότερη αξιοποίηση του αποθηκευτικού χώρου για τις ειδικές εκείνες περιπτώσεις που το επιτρέπουν. Τέλος, παρουσιάζονται οι συνδεδεμένες λίστες απλές και διπλές, σε συνδυασμό με τη δυναμική διαχείριση μνήμης.
Το Κεφάλαιο 18 με τίτλο “Είσοδος, Έξοδος, Αρχεία και Ροές”, εμβαθύνει στις λειτουργίες εισόδου και εξόδου (I/O) στη γλώσσα C, αναδεικνύοντας τη στενή τους σχέση με το λειτουργικό σύστημα και την εξέλιξη των τυπικών βιβλιοθηκών. Εξηγείται πώς η C διαχειρίζεται την είσοδο και έξοδο δεδομένων μέσω ροών (streams), οι οποίες λειτουργούν ως κανάλια επικοινωνίας μεταξύ του προγράμματος και εξωτερικών πόρων, όπως αρχεία ή συσκευές. Παρουσιάζονται οι μέθοδοι πρόσβασης σε αρχεία, διακρίνοντας τα σε αρχεία κειμένου και δυαδικά, και εξηγεί πώς η προσωρινή αποθήκευση (buffering), σε επίπεδο γραμμής ή μπλοκ, μπορεί να βελτιώσει την απόδοση. Εισάγονται συναρτήσεις υψηλού επιπέδου που βασίζονται σε ροές, καθώς και χαμηλού επιπέδου που βασίζονται σε file handlers.
Το Κεφάλαιο 19 με τίτλο “Δείκτες και σύνθετες Δηλώσεις”, εστιάζει στις προχωρημένες χρήσεις των δεικτών στη γλώσσα C, πέρα από τη βασική δήλωση και ανάθεση τιμής. Εξετάζεται η σχέση των δεικτών με απλούς και πολυδιάστατους πίνακες, και με συμβολοσειρές χαρακτήρων, αναδεικνύοντας πώς η σημειογραφία πίνακα μπορεί να αντικατασταθεί από τη σημειογραφία δεικτών με κατάλληλη χρήση της αριθμητικής δεικτών. Ιδιαίτερη έμφαση δίνεται στην κατανόηση σύνθετων δηλώσεων που περιλαμβάνουν δείκτες, όπως οι δείκτες σε συναρτήσεις, οι οποίοι επιτρέπουν την ανάπτυξη ευέλικτων συναρτήσεων και μπορούν να χρησιμοποιηθούν και ως τύποι επιστροφής. Παρουσιάζει επίσης τη χρήση δεικτών για την πρόσβαση σε ορίσματα γραμμής εντολών, επιτρέποντας στα προγράμματα να διαχειρίζονται δυναμικά τις παραμέτρους εισόδου που τους δίνονται κατά την ενεργοποίηση τους.
Το Κεφάλαιο 20 με τίτλο “Χαμηλού Επιπέδου Προγραμματισμός”, εισάγει τον χαμηλού επιπέδου προγραμματισμό στη C, επισημαίνοντας την επίδραση του στην φορητότητα του προγράμματος. Παρουσιάζει τεχνικές που επιτρέπουν τη διαχείριση πληροφορίας σε επίπεδο δυαδικού ψηφίου (bit), καθώς και τα στοιχεία της γλώσσας που το υποστηρίζουν, όπως οι δυαδικοί τελεστές, τα πεδία ψηφίων bitfields, οι δείκτες, οι ενώσεις, και η λέξη-κλειδί volatile. Αναφέρεται στις τεχνικές επικοινωνίας/ενσωμάτωσης με Assembly κώδικα, και αξιοποίησης υπηρεσιών του λειτουργικού συστήματος, καθώς και στην αξιοποίηση όλων αυτών για τη συγγραφή αποδοτικού και αξιόπιστου κώδικα.