C plus plus πρότυπο γλώσσας. Πρότυπο γλώσσας C plus plus Δωρεάν διαδικτυακά μαθήματα C από δύο κορυφαία φινλανδικά πανεπιστήμια

18.12.2023

Η γλώσσα C αναπτύχθηκε από τους Dennis Ritchie και Brian Kernighan μεταξύ 1969 και 1973. Το C προοριζόταν να υλοποιήσει το λειτουργικό δίκτυο UNIX, αλλά αργότερα βρήκε ευρύτερες εφαρμογές.

Αυτή τη στιγμή, ο Xi καταλαμβάνει μια σταθερή δεύτερη θέση.

Γιατί χρειάζεστε το C;

Έχουμε ήδη μιλήσει για τη σημασία της γλώσσας C, οπότε ας πάμε στα κύρια σημεία.

Ας ξεκινήσουμε με το γεγονός ότι το μεγαλύτερο μέρος του συστήματος λογισμικόγραμμένο στη γλώσσα C. Ο πυρήνας του πιο δημοφιλούς λειτουργικού συστήματος Linux ανοιχτού κώδικα γράφτηκε σε C.

Ένα τεράστιο πλεονέκτημα του C είναι ότι κάθε οδηγία της γλώσσας μεταφράζεται σε κώδικα μηχανής με άμεσο και κατανοητό τρόπο. Εκτελείται ακριβώς ο κώδικας που βλέπει ο προγραμματιστής στην οθόνη. Ωστόσο, στους σύγχρονους μεταγλωττιστές, φυσικά, μπορούν να χρησιμοποιηθούν, αλλά σε μια μειοψηφία περιπτώσεων.

Αξίζει επίσης να σημειωθεί ότι οι πιο δημοφιλείς γλώσσες προγραμματισμού σχετίζονται με τη C με τον ένα ή τον άλλο τρόπο. Έτσι, για παράδειγμα, η Java και η C# έχουν μια λεγόμενη σύνταξη τύπου C, και η C++ και η Objective-C είναι επεκτάσεις C με τον ένα ή τον άλλο τρόπο.

Εάν γράφετε κώδικα σε οποιαδήποτε δυναμική γλώσσα προγραμματισμού, είτε πρόκειται για PHP, JavaScript ή Python, τότε ο διερμηνέας, ο χρόνος εκτέλεσης και οι περισσότερες βιβλιοθήκες γράφονται κυρίως σε C. Επομένως, για να κατανοήσετε τα χαρακτηριστικά συμπεριφοράς μιας συγκεκριμένης γλώσσας, πρέπει να γνωρίζετε τα χαρακτηριστικά της γλώσσας C. Και αν έχετε ξεπεράσει τις δυνατότητες της γλώσσας προγραμματισμού σας, τότε πριν το καταλάβετε, θα αρχίσετε να γράφετε μια νέα επέκταση στο C.

Επιπλέον, η γνώση της C επιτρέπει στον προγραμματιστή να εκτιμήσει πραγματικά όλες τις απολαύσεις των γλωσσών προγραμματισμού υψηλού επιπέδου, καθώς και τους περιορισμούς που προκύπτουν κατά τη χρήση τους.

Και αυτοί είναι οι λόγοι για την εκμάθηση του C.

Τι ακολουθεί;

Τώρα που καταλάβαμε γιατί χρειαζόμαστε το C, προκύπτει ένα λογικό ερώτημα: "Πώς να το μάθουμε;"

Βιβλίο "Γλώσσα προγραμματισμού C"

Κανείς δεν μπορεί να σας πει για τη C καλύτερα από τους δημιουργούς αυτής της γλώσσας προγραμματισμού. Επομένως, το βιβλίο «The C Programming Language», γραμμένο από τους Dennis Ritchie και Brian Kernighan, είναι απαραίτητο για όλους όσοι έχουν αποφασίσει με κάποιο τρόπο να συνδέσουν τη ζωή τους με τον C.

Μάθημα "The Complete C Developer Course - Build 7 Exciting Projects"

Το μάθημα καλύπτει τόσο βασικές πτυχές της γλώσσας όσο και πιο προχωρημένες: προγραμματισμό γραφικών, μοντέλα μνήμης και πολλά άλλα. Κατά τη διάρκεια του μαθήματος, θα δημιουργήσετε 7 συναρπαστικά έργα, όπως ένα σύστημα διαχείρισης βάσεων δεδομένων και τον δικό σας ιό υπολογιστή.

Το μάθημα πληρώνεται, αλλά σίγουρα αξίζει τα λεφτά του. Στη συνέχεια προσφέρουμε δωρεάν υλικά.

Το περίφημο μάθημα του Χάρβαρντ "CS50"

Τώρα μιλάει. Πάνω απ 'όλα, το CS50 θα σας διδάξει πώς να σκέφτεστε. Μερικά από τα θέματα που θα καλύψετε κατά τη διάρκεια του μαθήματος είναι η αφαίρεση, οι αλγόριθμοι, οι δομές δεδομένων, η ενθυλάκωση, η διαχείριση πόρων, η ασφάλεια, η ανάπτυξη λογισμικού και η ανάπτυξη ιστού. Γλώσσες που θα χρησιμοποιήσετε: C, Python, SQL και JavaScript μαζί με HTML και CSS. Και το πιο σημαντικό, το μάθημα είναι δωρεάν.

Δωρεάν μάθημα “C Tutorial for Beginners”

Με αυτό το πρόγραμμα θα μάθετε τα βασικά της γλώσσας C, θα κατανοήσετε δείκτες, δομές και ενώσεις και επίσης θα μάθετε πώς να γράφετε απλά προγράμματα.

Δωρεάν online μαθήματα Γ από δύο κορυφαία φινλανδικά πανεπιστήμια

Περιλαμβάνει ολοκληρωμένο υλικό και πολλές ασκήσεις προγραμματισμού, καθώς και αυτόματο σύστημαδοκιμή.

Το μάθημα αναπτύχθηκε από κοινού από το Πανεπιστήμιο Aalto και το Πανεπιστήμιο του Ελσίνκι (το ίδιο όπου σπούδαζε κάποτε ο Linus Torvalds) και το υλικό που εξηγείται σε αυτό αντιγράφει πλήρως τα μαθήματα C που διδάσκονται σε αυτά τα πανεπιστήμια.

Βιβλίο "Learn C The Hard Way"

Το βιβλίο θα σας διδάξει το C που χρησιμοποιείται στην πραγματική ζωή για τη δημιουργία πραγματικών έργων και όχι αφηρημένων μηχανισμών και παιδαγωγικής θεωρίας. Θα μάθετε επίσης πολλά σημαντικά θέματα όπως αλγόριθμους και δομές δεδομένων και αυτοματοποιημένες δοκιμές. Οι ενδιαφερόμενοι μπορούν να βρουν τη μετάφρασή του στα ρωσικά. Η Tproger συνιστά επίσης συχνά καλά βιβλίαστον προγραμματισμό, οπότε ρίξτε μια ματιά

Αποφάσισα να δημοσιεύω περιστασιακά επιλεγμένα κεφάλαια από το πρότυπο γλώσσας C++.

Οι εργασίες για το πρότυπο του 2017 πλησιάζουν τώρα στην ολοκλήρωσή τους. Αλλά το τρέχον πρότυπο είναι το 2014. Η επίσημη έκδοση του προτύπου πληρώνεται (τιμή 133 δολάρια).

Ωστόσο, στον επίσημο ιστότοπο μπορείτε να κατεβάσετε την έκδοση 2014 (ανεπίσημη, αλλά λειτουργική και αρκετά κατάλληλη για σπουδές). Ως εκ τούτου, θα δημοσιεύσω αποσπάσματα από το πρότυπο του 2014 στον ιστότοπό μου.

Μπορείτε να κατεβάσετε το έγγραφο και να το διαβάσετε μόνοι σας. Ωστόσο, το αρχικό έγγραφο είναι στις , γεγονός που καθιστά ακόμη πιο δύσκολη τη μελέτη. Γι' αυτό ξεκίνησα αυτό το έπος με μετάφραση.

Θα διαρκέσει πολύ, αν όχι επ 'αόριστον))) Επειδή το πρότυπο περιέχει περισσότερες από 1300 σελίδες.

Αλλά ελπίζω ότι αυτές οι πληροφορίες θα είναι χρήσιμες σε κάποιον. Επομένως, και επίσης για να μην ξεχάσω τα αγγλικά, μερικές φορές θα το κάνω αυτό...

Ας ξεκινήσουμε με την πρώτη σελίδα του εγγράφου και μια περίληψη...

Αριθμός εγγράφου: N4296
Ημερομηνία: 2014-11-19
Αναθεώρηση: N4140
Υπεύθυνος: Richard Smith
Google Inc
[email προστατευμένο]

Προσχέδιο εργασίας, Πρότυπο προγραμματισμού

Γλώσσα C++

Σημείωση: Αυτό είναι ένα πρώιμο προσχέδιο. Υπάρχουν γνωστές ανακρίβειες και κάποιες πληροφορίες που λείπουν, και το πρότυπο έχει πολλά πράγματα που δεν είναι πολύ καλά μέρηπου πρέπει να βελτιωθούν.

ΣΠΟΥΔΑΙΟΣ!
Δεν ακολουθούν ακριβώς τα πρότυπα όλοι οι μεταγλωττιστές και τα εργαλεία ανάπτυξης. Δηλαδή, ορισμένες λειτουργίες που ορίζονται από το πρότυπο μπορεί να μην υποστηρίζονται από κάποιον μεταγλωττιστή. Οι μεταγλωττιστές μπορούν επίσης να παρέχουν τους δικούς τους πρόσθετα χαρακτηριστικάκαι βιβλιοθήκες που δεν περιλαμβάνονται στο πρότυπο.

ΣΗΜΕΙΩΜΑ
Παρακάτω είναι οι κύριες ενότητες του προτύπου C++ 2014, στο μέτρο των δυνατοτήτων μου, θα μεταφράσω αυτές τις ενότητες, καθώς και τα σχόλιά μου όπου χρειάζεται. Στη συνέχεια, αντί για το κείμενο με το όνομα της ενότητας, θα εμφανιστούν σύνδεσμοι. Οι ενότητες θα έχουν επίσης υποενότητες...

ΚΥΡΙΕΣ ΕΝΟΤΗΤΕΣ

ΚΑΤΑΛΟΓΟΣ ΠΙΝΑΚΩΝ
ΛΙΣΤΑ ΕΙΚΟΝΩΝ

2. ΛΕΞΙΚΕΣ ΣΥΜΒΑΣΕΙΣ
3. ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ
4. ΤΥΠΟΙ ΜΕΤΑΤΡΟΠΕΣ
5. ΕΚΦΡΑΣΕΙΣ
6. ΧΕΙΡΙΣΤΕΣ
7. ΑΝΑΚΟΙΝΩΣΕΙΣ
8. ΠΕΡΙΓΡΑΦΕΙ
9. ΤΑΞΕΙΣ
10. ΠΑΡΑΓΩΓΕΣ ΤΑΞΕΙΣ
11. ΕΛΕΓΧΟΣ ΠΡΟΣΒΑΣΗΣ ΜΕΛΩΝ
12. ΕΙΔΙΚΕΣ ΛΕΙΤΟΥΡΓΙΕΣ ΜΕΛΩΝ
13. ΥΠΕΡΦΟΡΤΩΣΗ
14. ΠΡΟΤΥΠΑ
15. ΧΕΙΡΙΣΜΟΣ ΕΞΑΙΡΕΣΗΣ
16. ΟΔΗΓΙΕΣ ΠΡΟΕΠΕΞΕΡΓΑΣΙΑΣ
17. ΒΙΒΛΙΟΘΗΚΕΣ: ΓΕΝΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ
18. ΒΙΒΛΙΟΘΗΚΗ ΓΛΩΣΣΙΚΗΣ ΥΠΟΣΤΗΡΙΞΗΣ
19. ΒΙΒΛΙΟΘΗΚΗ ΔΙΑΓΝΩΣΤΙΚΩΝ
20. ΒΙΒΛΙΟΘΗΚΗ ΒΑΣΙΚΩΝ ΕΦΑΡΜΟΓΩΝ
21. ΒΙΒΛΙΟΘΗΚΗ ΧΟΡΔΩΝ
22. ΒΙΒΛΙΟΘΗΚΗ ΕΝΤΟΠΙΣΜΟΥ
23. ΒΙΒΛΙΟΘΗΚΗ ΔΟΧΕΙΩΝ
24. ΒΙΒΛΙΟΘΗΚΗ ΤΩΝ ITERATORS
25. ΒΙΒΛΙΟΘΗΚΗ ΑΛΓΟΡΙΘΜΩΝ
26. ΒΙΒΛΙΟΘΗΚΗ ΑΡΙΘΜΩΝ
27. ΒΙΒΛΙΟΘΗΚΗ ΕΙΣΟΔΩΝ-ΕΞΟΔΩΝ
28. ΒΙΒΛΙΟΘΗΚΗ ΤΑΚΤΙΚΗΣ ΕΚΦΡΑΣΗΣ
29. ΒΙΒΛΙΟΘΗΚΗ ΑΤΟΜΙΚΩΝ ΛΕΙΤΟΥΡΓΙΩΝ
30. ΒΙΒΛΙΟΘΗΚΗ ΥΠΟΣΤΗΡΙΞΗΣ ΡΕΥΜΑΤΩΝ
ΠΑΡΑΡΤΗΜΑ Α. ΓΡΑΜΜΑΤΙΚΗ: ΣΥΝΟΨΗ
ΠΑΡΑΡΤΗΜΑ Β. ΜΕΓΕΘΗ ΑΡΧΕΙΟΥ ΕΞΟΔΟΥ
ΠΑΡΑΡΤΗΜΑ Γ. ΠΡΟΔΙΑΓΡΑΦΕΣ ΣΥΜΒΑΤΟΤΗΤΑΣ
ΠΑΡΑΡΤΗΜΑ Ε. ΟΝΟΜΑΤΑ ΓΙΑ ΤΑ ΑΝΑΓΝΩΡΙΣΤΙΚΑ ΣΥΜΒΟΛΑ
ΠΑΡΑΡΤΗΜΑ ΣΤ. ΣΤΑΥΡΕΣ ΑΝΑΦΟΡΕΣ
ΔΕΙΚΤΗΣ
ΓΡΑΜΜΑΤΙΚΗ ΠΡΟΪΟΝΤΑ ΕΥΡΕΤΗΡΙΟ
ΟΝΟΜΑ ΒΙΒΛΙΟΘΗΚΗΣ ΕΥΡΕΤΗΡΙΟ
ΔΕΙΚΤΗΣ ΣΥΜΠΕΡΙΦΟΡΑΣ ΟΡΙΣΜΕΝΗΣ ΑΠΟ ΕΠΙΔΟΣΕΙΣ

Η δημοτικότητα της γλώσσας προγραμματισμού C είναι δύσκολο να υπερεκτιμηθεί, ειδικά αν θυμόμαστε τα προηγούμενα επιτεύγματά της. Πιθανώς, κάθε προγραμματιστής, τουλάχιστον, γνωρίζει την ύπαρξή του και, το πολύ, έχει προσπαθήσει να προγραμματίσει σε αυτό. Η C είναι ο προκάτοχος γλωσσών όπως C++, Objective-C, C#, Java.

Η Microsoft επέλεξε σύνταξη τύπου C για να αναπτύξει τη μητρική γλώσσα για την πλατφόρμα .Net. Επιπλέον, πολλά λειτουργικά συστήματα είναι γραμμένα σε C.

Φυσικά, το C δεν είναι τέλειο: οι δημιουργοί της γλώσσας, ο Ken Thompson και ο Dennis Ritchie, πέρασαν πολύ καιρό για να την τελειοποιήσουν. Η τυποποίηση του C είναι ακόμη σε εξέλιξη. Υπάρχει εδώ και πάνω από 45 χρόνια και χρησιμοποιείται ενεργά.

Συχνά συνδέεται με όχι μία, αλλά δύο γλώσσες προγραμματισμού - C/C++. Ωστόσο, παρακάτω θα μιλήσουμε συγκεκριμένα για το "καθαρό" C.

Η γλώσσα C έχει τις ρίζες της στο ALGOL (ALGorithmic Language), το οποίο δημιουργήθηκε το 1958 από μια επιτροπή Ευρωπαίων και Αμερικανών επιστημόνων υπολογιστών σε μια συνάντηση στο ETH της Ζυρίχης. Η γλώσσα ήταν μια απάντηση σε ορισμένες από τις ελλείψεις της γλώσσας FORTRAN και μια προσπάθεια διόρθωσής τους. Επιπλέον, η ανάπτυξη του Xi συνδέεται στενά με τη δημιουργία ενός επιχειρησιακού συστήματα UNIX, στο οποίο συμμετείχαν επίσης οι Ken Thompson και Dennis Ritchie.

UNIX

Το έργο MAC (Multiple Access Computer, Machine-Aided Cognition, Man and Computer) ξεκίνησε ως ένα καθαρά ερευνητικό έργο στο MIT το 1963.

Ως μέρος του έργου MAC, αναπτύχθηκε το λειτουργικό σύστημα CTSS (Compatible Time-Sharing System). Στο δεύτερο μισό της δεκαετίας του '60, δημιουργήθηκαν πολλά άλλα συστήματα χρονομερισμού, όπως τα BBN, DTSS, JOSS, SDC και Multiplexed Information and Computing Service (MULTICS), μεταξύ άλλων.

Το Multics είναι μια κοινή ανάπτυξη των MIT, Bell Telephone Laboratories (BTL) και General Electric(GE) για τη δημιουργία ενός λειτουργικού συστήματος κοινής χρήσης χρόνου για τον υπολογιστή GE-645. Τελευταίος υπολογιστήςλειτουργεί από τη Multics και απενεργοποιήθηκε στις 31 Οκτωβρίου 2000.

Ωστόσο, η BTL εγκατέλειψε αυτό το έργο στις αρχές του 1969.

Μερικοί από τους υπαλλήλους του (Ken Thompson, Dennis Ritchie, Stu Feldman, Doug McIlroy, Bob Morris, Joe Ossanna) ήθελαν να συνεχίσουν τη δουλειά μόνοι τους. Ο Thompson εργάστηκε στο παιχνίδι Space Travel στο GE-635. Γράφτηκε πρώτα για το Multics και στη συνέχεια ξαναγράφτηκε στο Fortran κάτω από το GECOS στο GE-635. Το παιχνίδι προσομοίωσε τα σώματα του ηλιακού συστήματος και ο παίκτης έπρεπε να προσγειώσει το πλοίο κάπου σε έναν πλανήτη ή δορυφόρο.

Ούτε το λογισμικό ούτε το υλικό αυτού του υπολογιστή ήταν κατάλληλα για ένα τέτοιο παιχνίδι. Ο Thompson έψαχνε για μια εναλλακτική λύση και ξαναέγραψε το παιχνίδι για ένα εγκαταλελειμμένο PDP-7. Η μνήμη ήταν λέξεις 8K 18-bit και υπήρχε επίσης ένας διανυσματικός επεξεργαστής οθόνης για να εμφανίζει όμορφα γραφικά για εκείνη την εποχή.


Εικόνα από το slideshare.net

Ο Thompson και ο Ritchie έκαναν όλη την ανάπτυξη στο cross-assembler στο GE και μετέφεραν τον κώδικα σε διάτρητες ταινίες. Ο Thompson δεν του άρεσε ενεργά και άρχισε να γράφει ένα λειτουργικό σύστημα για το PDP-7, ξεκινώντας από το σύστημα αρχείων. Έτσι γεννήθηκε το UNIX.

Ο Thompson ήθελε να δημιουργήσει ένα άνετο υπολογιστικό περιβάλλον, κατασκευασμένο σύμφωνα με το σχέδιό του, χρησιμοποιώντας κάθε διαθέσιμο μέσο. Το όραμά του, προφανώς εκ των υστέρων, ενσωμάτωσε πολλές από τις καινοτομίες του Multics, συμπεριλαμβανομένης της έννοιας της διαδικασίας ως βάσης της διαχείρισης, δέντρο σύστημα αρχείων, ένας διερμηνέας εντολών ως πρόγραμμα χρήστη, απλοποιημένη αναπαράσταση αρχείων κειμένου και γενικευμένη πρόσβαση σε συσκευές.

Το PDP-7 UNIX σηματοδότησε επίσης την αρχή της γλώσσας Β υψηλού επιπέδου, η οποία επηρεάστηκε από τη γλώσσα BCPL. Ο Ντένις Ρίτσι είπε ότι το Β είναι το Γ χωρίς τύπους. Το BCPL χωρούσε σε 8 KB μνήμης και επανασχεδιάστηκε προσεκτικά από τον Thompson. Ο Β σταδιακά μεγάλωσε στο S.


Εικόνα από it-world.com

Μέχρι το 1973, η γλώσσα C είχε γίνει αρκετά ισχυρή ώστε μεγάλο μέρος του πυρήνα του UNIX, που αρχικά γράφτηκε στη γλώσσα συναρμολόγησης PDP-11/20, γράφτηκε ξανά σε C. Ήταν ένας από τους πρώτους πυρήνες λειτουργικού συστήματος που γράφτηκαν σε γλώσσα διαφορετική από τη γλώσσα assembly.

Αποδεικνύεται ότι το C είναι ένα «υποπροϊόν» που λαμβάνεται κατά τη δημιουργία λειτουργικό σύστημα UNIX.

Οι πρόγονοι του Xi

Εμπνευσμένο από τη γλώσσα ALGOL-60, το Μαθηματικό Εργαστήριο του Πανεπιστημίου του Κέιμπριτζ, μαζί με το Τμήμα Υπολογιστών του Πανεπιστημίου του Λονδίνου, δημιούργησαν τη γλώσσα CPL (Combined Programming Language) το 1963.

Η γλώσσα CPL θεωρήθηκε δύσκολη και ως απάντηση σε αυτό, ο Martin Richardson δημιούργησε τη γλώσσα BCPL το 1966, ο κύριος σκοπός της οποίας ήταν να γράφει μεταγλωττιστές. Στις μέρες μας πρακτικά δεν χρησιμοποιείται, αλλά κάποια στιγμή έπαιξε σημαντικό ρόλο λόγω της καλής φορητότητάς του.

Το BCPL χρησιμοποιήθηκε στις αρχές της δεκαετίας του 1970 σε πολλά ενδιαφέροντα έργα, συμπεριλαμβανομένου του λειτουργικού συστήματος OS6 και εν μέρει στις εκκολαπτόμενες εξελίξεις του Xerox PARC.

Η BCPL χρησίμευσε ως ο πρόγονος της γλώσσας Bi (B), που αναπτύχθηκε το 1969 στα ήδη γνωστά AT&T Bell Telephone Laboratories, εξίσου εξοικειωμένα με τον Ken Thompson και τον Dennis Ritchie.

Όπως και άλλα λειτουργικά συστήματα της εποχής, το UNIX γράφτηκε σε γλώσσα assembly. Ο εντοπισμός σφαλμάτων προγραμμάτων στο assembler είναι πραγματικός πόνος. Ο Thompson αποφάσισε ότι χρειαζόταν μια γλώσσα υψηλού επιπέδου για την περαιτέρω ανάπτυξη του λειτουργικού συστήματος και κατέληξε σε μια μικρή γλώσσα B. Ο Thompson πήρε τη γλώσσα BCPL ως βάση. Η γλώσσα Β μπορεί να θεωρηθεί ως C χωρίς τύπους.

Τα BCPL, B και C διαφέρουν συντακτικά σε πολλές λεπτομέρειες, αλλά είναι βασικά παρόμοια. Τα προγράμματα αποτελούνται από μια ακολουθία καθολικών δηλώσεων και δηλώσεων λειτουργίας (διαδικασίας). Στο BCPL, οι διαδικασίες μπορούν να είναι ένθετες, αλλά δεν μπορούν να αναφέρονται σε μη στατικά αντικείμενα που ορίζονται στις διαδικασίες που περιέχουν. Οι Β και Γ αποφεύγουν αυτόν τον περιορισμό εισάγοντας έναν αυστηρότερο: δεν υπάρχουν καθόλου ένθετες διαδικασίες. Κάθε μία από τις γλώσσες (εκτός από τις πιο αρχαίες εκδόσεις της Β) υποστηρίζει ξεχωριστή μεταγλώττιση και παρέχει ευκολίες για τη συμπερίληψη κειμένου από αρχεία με όνομα.

Σε αντίθεση με τις ευρέως διαδεδομένες συντακτικές αλλαγές που συνέβησαν κατά τη δημιουργία του B, η βασική σημασιολογία του BCPL - η δομή του τύπου και οι κανόνες αξιολόγησης έκφρασης - παρέμειναν άθικτες. Και οι δύο γλώσσες είναι άτυπες, ή μάλλον, έχουν έναν ενιαίο τύπο δεδομένων - "λέξη" ή "κελί", ένα σύνολο bits σταθερού μήκους. Η μνήμη σε αυτές τις γλώσσες είναι μια σειρά τέτοιων κελιών και η σημασία των περιεχομένων ενός κελιού εξαρτάται από τη λειτουργία που εφαρμόζεται σε αυτό. Για παράδειγμα, ο τελεστής "+" απλώς προσθέτει τους τελεστές του χρησιμοποιώντας την εντολή προσθήκης μηχανής και άλλους αριθμητικές πράξειςαδιαφορούν επίσης για τη σημασία των τελεστών τους.

Ούτε τα BCPL, B ούτε C εκχωρούν δεδομένα χαρακτήρων στη γλώσσα. αντιμετωπίζουν τις συμβολοσειρές ως διανύσματα ακεραίων και συμπληρωμάτων γενικούς κανόνεςαρκετές συμφωνίες. Και στα δύο BCPL και B, μια κυριολεκτική συμβολοσειρά σημαίνει τη διεύθυνση μιας στατικής περιοχής που έχει αρχικοποιηθεί με χαρακτήρες συμβολοσειράς συσκευασμένους σε κελιά.

Πώς δημιουργήθηκε το C

Το 1970, η Bell Labs αγόρασε έναν υπολογιστή PDP-11 για το έργο. Δεδομένου ότι ο B ήταν έτοιμος να τρέξει στο PDP-11, ο Thompson ξανάγραψε το τμήμα UNIX στο B.

Αλλά το μοντέλο B και το BCPL συνεπάγονταν επιβάρυνση κατά την εργασία με δείκτες: οι κανόνες της γλώσσας, ο καθορισμός ενός δείκτη ως ευρετηρίου σε μια σειρά λέξεων, έκαναν τους δείκτες ευρετήρια λέξεων. Κάθε πρόσβαση δείκτη κατά την εκτέλεση παρήγαγε μια κλιμάκωση του δείκτη στη διεύθυνση byte που περίμενε ο επεξεργαστής.

Ως εκ τούτου, κατέστη σαφές ότι για την αντιμετώπιση της διευθυνσιοδότησης χαρακτήρων και byte, καθώς και για την προετοιμασία για την επερχόμενη υποστήριξη υλικού για υπολογισμούς κινητής υποδιαστολής, χρειαζόταν πληκτρολόγηση.

Το 1971, ο Ritchie άρχισε να δημιουργεί μια διευρυμένη έκδοση του B. Στην αρχή το ονόμασε NB (New B), αλλά όταν η γλώσσα έγινε πολύ διαφορετική από τη B, το όνομα άλλαξε σε C. Να τι έγραψε ο ίδιος ο Ritchie για αυτό:

Ήθελα η δομή όχι μόνο να χαρακτηρίζει ένα αφηρημένο αντικείμενο, αλλά και να περιγράφει ένα σύνολο bits που θα μπορούσαν να διαβαστούν από τον κατάλογο. Πού θα μπορούσε ο μεταγλωττιστής να κρύψει τον δείκτη για το όνομα που απαιτεί η σημασιολογία; Ακόμα κι αν οι δομές προορίζονταν να είναι πιο αφηρημένες και ο χώρος του δείκτη μπορούσε να κρυφτεί κάπου, πώς θα το αποφάσιζα τεχνικό πρόβλημασωστή αρχικοποίηση αυτών των δεικτών κατά την κατανομή μνήμης για ένα σύνθετο αντικείμενο, ίσως μια δομή που περιέχει πίνακες που περιέχουν δομές και ούτω καθεξής σε ένα αυθαίρετο βάθος;

Η λύση ήταν ένα αποφασιστικό άλμα στην εξελικτική αλυσίδα μεταξύ του πληκτρολογημένου BCPL και του πληκτρολογημένου C. Εξάλειψε την υλοποίηση του δείκτη σε αποθήκευση και αντ' αυτού προκάλεσε τη δημιουργία του όταν αναφέρθηκε το όνομα του πίνακα στην έκφραση. Ένας κανόνας που συνεχίζεται στο σημερινό C είναι ότι οι τιμές του πίνακα, όταν αναφέρονται σε μια έκφραση, μετατρέπονται σε δείκτες στο πρώτο από τα αντικείμενα που αποτελούν αυτόν τον πίνακα.

Η δεύτερη καινοτομία που ξεχωρίζει πιο ξεκάθαρα το C από τους προκατόχους του είναι αυτή η πιο ολοκληρωμένη δομή τύπου και ιδιαίτερα η εκφραστικότητα του στη σύνταξη δηλώσεων. Η NB πρόσφερε τους βασικούς τύπους int και char, μαζί με πίνακες από αυτούς και δείκτες προς αυτούς, αλλά όχι άλλο τρόπο σύνθεσής τους.

Απαιτήθηκε μια γενίκευση: για ένα αντικείμενο οποιουδήποτε τύπου θα πρέπει να είναι δυνατό να περιγραφεί ένα νέο αντικείμενο που συνδυάζει πολλά τέτοια αντικείμενα σε έναν πίνακα, το λαμβάνει από μια συνάρτηση ή είναι δείκτης σε αυτό.



Εικόνα από το The C Language: M. Waite, S. Prata, D. Martin

Για οποιοδήποτε αντικείμενο τέτοιου σύνθετου τύπου, υπήρχε ήδη ένας τρόπος να δείχνει το αντικείμενο που αποτελεί μέρος του: ευρετηρίαση του πίνακα, κλήση μιας συνάρτησης, χρήση του τελεστή indirection με τον δείκτη. Παρόμοιος συλλογισμός οδήγησε σε μια σύνταξη για τη δήλωση ονομάτων που αντικατοπτρίζει τη σύνταξη της έκφρασης όπου χρησιμοποιούνται αυτά τα ονόματα. Ετσι

δηλώνει έναν ακέραιο, έναν δείκτη σε έναν ακέραιο και έναν δείκτη σε έναν δείκτη σε έναν ακέραιο. Η σύνταξη αυτών των δηλώσεων αντικατοπτρίζει το γεγονός ότι τα i, *pi και **ppi καταλήγουν σε τύπο int όταν χρησιμοποιούνται σε μια έκφραση. Με παρόμοιο τρόπο
Δηλώστε μια συνάρτηση που επιστρέφει έναν ακέραιο, μια συνάρτηση που επιστρέφει έναν δείκτη σε έναν ακέραιο, έναν δείκτη σε μια συνάρτηση που επιστρέφει έναν ακέραιο αριθμό.
Δηλώστε έναν πίνακα δεικτών σε έναν ακέραιο αριθμό, έναν δείκτη σε έναν πίνακα ακεραίων.

Σε όλες αυτές τις περιπτώσεις, η δήλωση μιας μεταβλητής μοιάζει με τη χρήση της σε μια έκφραση της οποίας ο τύπος είναι ό,τι βρίσκεται στην αρχή της δήλωσης.

Δεκαετία 70: «ώρα των προβλημάτων» και ψεύτικες διάλεκτοι

Μέχρι το 1973, η γλώσσα είχε γίνει αρκετά σταθερή ώστε το UNIX να ξαναγραφτεί σε αυτήν. Η μετάβαση στο C παρείχε ένα σημαντικό πλεονέκτημα: φορητότητα. Γράφοντας έναν μεταγλωττιστή C για κάθε ένα από τα μηχανήματα στα εργαστήρια Bell, η ομάδα ανάπτυξης θα μπορούσε να μεταφέρει το UNIX σε αυτά.

Σχετικά με την εμφάνιση της γλώσσας C, ο Peter Moylan γράφει στο βιβλίο του «The case against C»: «Αυτό που χρειαζόταν ήταν μια γλώσσα που θα μπορούσε να παρακάμψει ορισμένους από τους άκαμπτους κανόνες που είναι ενσωματωμένοι στις περισσότερες γλώσσες υψηλού επιπέδου και να τους εξασφαλίσει αξιοπιστία. Χρειαζόμασταν μια γλώσσα που θα μας επέτρεπε να κάνουμε ό,τι πριν μπορούσε να γίνει μόνο σε γλώσσα assembly ή σε επίπεδο κώδικα μηχανής».

Το C συνέχισε να εξελίσσεται στη δεκαετία του '70. Στη δεκαετία 1973-1980, η γλώσσα μεγάλωσε λίγο: η δομή τύπων έλαβε ανυπόγραφη, μακροσκελής τύπους, ένωση και απαρίθμηση, οι δομές έγιναν κοντά στα αντικείμενα της τάξης (μόνο η σημείωση για κυριολεκτικά έλειπε).

Το πρώτο βιβλίο για το C. Η Γλώσσα Προγραμματισμού C, που γράφτηκε από τους Brian Kernighan και Dennis Ritchie και δημοσιεύτηκε το 1978, έγινε η Βίβλος των προγραμματιστών C. Ελλείψει επίσημου προτύπου, αυτό το βιβλίο -γνωστό και ως K&R, ή «Λευκή Βίβλος» όπως θέλουν να το αποκαλούν οι θαυμαστές της C- έχει γίνει το de facto πρότυπο.


Εικόνα από Learnc.info

Στη δεκαετία του '70 υπήρχαν λίγοι προγραμματιστές C και οι περισσότεροι από αυτούς ήταν χρήστες UNIX. Ωστόσο, στη δεκαετία του '80, το C πέρασε από τα στενά όρια του κόσμου του UNIX. Οι μεταγλωττιστές C έχουν γίνει διαθέσιμοι σε μια ποικιλία μηχανημάτων που εκτελούν διαφορετικά λειτουργικά συστήματα. Συγκεκριμένα, το C άρχισε να εξαπλώνεται στην ταχέως αναπτυσσόμενη πλατφόρμα υπολογιστών IBM.

Η K&R εισήγαγε τα ακόλουθα χαρακτηριστικά γλώσσας:

Δομές (τύπος δεδομένων struct);
long ακέραιος (long int τύπος δεδομένων).
ανυπόγραφος ακέραιος αριθμός (τύπος δεδομένων unsigned int).
τελεστής += και παρόμοιοι (παλιοί τελεστές =+ μπέρδεψαν τον λεξικό αναλυτή του μεταγλωττιστή C, για παράδειγμα, όταν συγκρίνουν τις εκφράσεις i =+ 10 και i = +10).

Το K&R C θεωρείται συχνά το πιο σημαντικό μέρος της γλώσσας που πρέπει να υποστηρίζει ένας μεταγλωττιστής C. Για πολλά χρόνια, ακόμη και μετά την κυκλοφορία του ANSI C, θεωρούνταν το ελάχιστο επίπεδο στο οποίο έπρεπε να τηρούν οι προγραμματιστές που ήθελαν να επιτύχουν τη μέγιστη φορητότητα από τα προγράμματά τους, επειδή τότε δεν υποστήριζαν όλοι οι μεταγλωττιστές το ANSI C, αλλά καλός κωδικόςστο K&R C ίσχυε επίσης για το ANSI C.

Μαζί με την αύξηση της δημοτικότητας ήρθαν και προβλήματα. Οι προγραμματιστές που έγραψαν νέους μεταγλωττιστές έλαβαν ως βάση τη γλώσσα που περιγράφεται στο K&R. Δυστυχώς, στο K&R ορισμένα χαρακτηριστικά της γλώσσας περιγράφονταν αόριστα, έτσι οι μεταγλωττιστές συχνά τα ερμήνευαν κατά την κρίση τους. Επιπλέον, το βιβλίο δεν έκανε σαφή διάκριση μεταξύ του τι είναι χαρακτηριστικό της γλώσσας και τι είναι χαρακτηριστικό του λειτουργικού συστήματος UNIX.

Από τη δημοσίευση του K&R C, αρκετές δυνατότητες έχουν προστεθεί στη γλώσσα, που υποστηρίζονται από μεταγλωττιστές από την AT&T και ορισμένους άλλους κατασκευαστές:

Συναρτήσεις που δεν επιστρέφουν τιμή (τύπου void) και δείκτες που δεν έχουν τύπο (τύπου void *).
λειτουργίες που επιστρέφουν συνδικάτα και δομές.
ονόματα πεδίων αυτών των δομών σε διαφορετικούς χώρους ονομάτων για κάθε δομή.
αναθέσεις δομής?
σταθερός προσδιοριστής (const);
τυπική βιβλιοθήκη, το οποίο υλοποιεί τις περισσότερες από τις λειτουργίες που εισάγονται από διάφορους κατασκευαστές.
τύπος enum (enum);
κλασματικός αριθμόςαπλής ακρίβειας (πλωτήρας).

Αυτό που έκανε την κατάσταση χειρότερη ήταν ότι μετά τη δημοσίευση του K&R, το C συνέχισε να αναπτύσσεται: νέα χαρακτηριστικά προστέθηκαν σε αυτό και τα παλιά αποκόπηκαν από αυτό. Σύντομα υπήρξε προφανής η ανάγκη για μια ολοκληρωμένη, ακριβή και σύγχρονη περιγραφή της γλώσσας. Χωρίς ένα τέτοιο πρότυπο, άρχισαν να εμφανίζονται διάλεκτοι της γλώσσας, οι οποίες παρενέβαιναν στη φορητότητα - την ισχυρότερη πτυχή της γλώσσας.

Πρότυπα

Στα τέλη της δεκαετίας του 1970, η γλώσσα C άρχισε να αντικαθιστά τη BASIC, η οποία εκείνη την εποχή ήταν ο ηγέτης στον προγραμματισμό μικροϋπολογιστών. Στη δεκαετία του 1980, προσαρμόστηκε στην αρχιτεκτονική IBM-PC, γεγονός που οδήγησε σε σημαντικό άλμα στη δημοτικότητά του.

Το Αμερικανικό Εθνικό Ινστιτούτο Προτύπων (ANSI) άρχισε να αναπτύσσει το πρότυπο γλώσσας C. Κάτω από αυτόν, το 1983, δημιουργήθηκε η επιτροπή X3J11, η οποία άρχισε να αναπτύσσει το πρότυπο. Η πρώτη έκδοση του προτύπου κυκλοφόρησε το 1989 και ονομαζόταν C89. Το 1990, μετά από μικρές αλλαγές στο πρότυπο, υιοθετήθηκε από τον Διεθνή Οργανισμό Τυποποίησης ISO. Στη συνέχεια έγινε γνωστό με τον κωδικό ISO/IEC 9899:1990, αλλά μεταξύ των προγραμματιστών κόλλησε το όνομα που σχετίζεται με το έτος υιοθέτησης του προτύπου: C90. Τελευταία στις αυτή τη στιγμήΗ έκδοση του προτύπου είναι το ISO/IEC 9899:1999, γνωστό και ως C99, το οποίο υιοθετήθηκε το 2000.

Μεταξύ των καινοτομιών του προτύπου C99, αξίζει να δοθεί προσοχή στην αλλαγή στον κανόνα σχετικά με τον τόπο δήλωσης των μεταβλητών. Τώρα οι νέες μεταβλητές θα μπορούσαν να δηλωθούν στη μέση του κώδικα, και όχι μόνο στην αρχή ενός σύνθετου μπλοκ ή στο καθολικό εύρος.

Μερικά χαρακτηριστικά του C99:

Ενσωματωμένες συναρτήσεις (inline);
Δήλωση τοπικών μεταβλητών σε οποιαδήποτε δήλωση κειμένου προγράμματος (όπως στη C++).
νέους τύπους δεδομένων όπως long long int (για διευκόλυνση της μετάβασης από αριθμούς 32-64-bit), ο ρητός τύπος δεδομένων Boolean _Bool και ο σύνθετος τύπος για την αναπαράσταση μιγαδικών αριθμών.
πίνακες μεταβλητού μήκους.
υποστήριξη για περιορισμένους δείκτες (περιορισμός).
με όνομα αρχικοποίηση δομών: struct ( int x, y, z; ) point = ( .y=10, .z=20, .x=30 );
υποστήριξη για σχόλια μιας γραμμής που ξεκινούν με //, δανεισμένα από την C++ (πολλοί μεταγλωττιστές C τα υποστήριζαν προηγουμένως ως προσθήκη).
αρκετές νέες λειτουργίες βιβλιοθήκης όπως το snprintf.
πολλά νέα αρχεία κεφαλίδας, όπως το stdint.h.

Το πρότυπο C99 τώρα περισσότερο ή λιγότερο υποστηρίζεται από όλους τους σύγχρονους μεταγλωττιστές C. Στην ιδανική περίπτωση, ο κώδικας γραμμένος σε C σύμφωνα με τα πρότυπα και χωρίς τη χρήση υλικού και κλήσεων που εξαρτώνται από το σύστημα έγινε κώδικας ανεξάρτητος από υλικό και πλατφόρμα.

Το 2007, ξεκίνησαν οι εργασίες για το επόμενο πρότυπο γλώσσας C. Δημοσιεύθηκε 8 Δεκεμβρίου 2011 νέο πρότυπογια τη γλώσσα C (ISO/IEC 9899:2011). Ορισμένες δυνατότητες του νέου προτύπου υποστηρίζονται ήδη από τους μεταγλωττιστές GCC και Clang.

Κύρια χαρακτηριστικά του C11:

Υποστήριξη πολλαπλών νημάτων.
Βελτιωμένη υποστήριξη Unicode.
γενικευμένες μακροεντολές (τυπικές γενικές εκφράσεις, επιτρέπουν στατική υπερφόρτωση).
ανώνυμες δομές και ενώσεις (απλοποιούν την πρόσβαση σε ένθετες δομές).
Έλεγχος ευθυγράμμισης αντικειμένων.
Στατικοί ισχυρισμοί.
αφαίρεση της συνάρτησης επικίνδυνων παίρνει (υπέρ του ασφαλούς gets_s).
λειτουργία quick_exit;
προσδιοριστής συνάρτησης _Noreturn;
νέα αποκλειστική λειτουργία ανοίγματος αρχείων.

Παρά την ύπαρξη του προτύπου '11, πολλοί μεταγλωττιστές εξακολουθούν να μην υποστηρίζουν πλήρως ούτε τις εκδόσεις C99.

Γιατί επικρίνεται ο Σι

Έχει ένα αρκετά υψηλό εμπόδιο εισόδου, γεγονός που καθιστά δύσκολη τη χρήση στη διδασκαλία ως πρώτη γλώσσα προγραμματισμού. Κατά τον προγραμματισμό σε C, υπάρχουν πολλές λεπτομέρειες που πρέπει να λάβετε υπόψη. «Γεννημένος από ένα υπόβαθρο χάκερ, ενθαρρύνει ένα στυλ προγραμματισμού που είναι συχνά ανασφαλές και ενθαρρύνει τη σύνταξη περίπλοκου κώδικα», γράφει η Wikipedia.

Ο Peter Moylan εξέφρασε βαθύτερη και πιο αιτιολογημένη κριτική. Αφιέρωσε 12 σελίδες στην κριτική του Xi. Ακολουθούν μερικά αποσπάσματα:

Προβλήματα με την αρθρωτή
Ο αρθρωτός προγραμματισμός σε C είναι δυνατός, αλλά μόνο εάν ο προγραμματιστής τηρεί έναν αριθμό αρκετά αυστηρών κανόνων:

Πρέπει να υπάρχει ακριβώς ένα αρχείο κεφαλίδας για κάθε ενότητα. Θα πρέπει να περιέχει μόνο εξαγώγιμα πρωτότυπα συναρτήσεων, περιγραφές και τίποτα άλλο (εκτός από σχόλια).

Η διαδικασία εξωτερικής κλήσης θα πρέπει να γνωρίζει για αυτήν την ενότητα μόνο τα σχόλια στο αρχείο κεφαλίδας.

Για να ελέγξετε την ακεραιότητα, κάθε λειτουργική μονάδα πρέπει να εισάγει το δικό της αρχείο κεφαλίδας.

Για να εισαγάγετε οποιαδήποτε πληροφορία από άλλη λειτουργική μονάδα, κάθε λειτουργική μονάδα πρέπει να περιέχει γραμμές #include καθώς και σχόλια που υποδεικνύουν τι εισάγεται.

Τα πρωτότυπα συναρτήσεων μπορούν να χρησιμοποιηθούν μόνο σε αρχεία κεφαλίδας. (Αυτός ο κανόνας είναι απαραίτητος επειδή η γλώσσα C δεν έχει μηχανισμό για να ελέγχει ότι μια συνάρτηση υλοποιείται στην ίδια λειτουργική μονάδα με το πρωτότυπό της, επομένως η χρήση ενός πρωτοτύπου μπορεί να καλύψει ένα σφάλμα "συνάρτησης που λείπει".)

Οποιαδήποτε καθολική μεταβλητή σε μια λειτουργική μονάδα και οποιαδήποτε συνάρτηση εκτός από αυτή που εισάγεται μέσω του αρχείου κεφαλίδας, πρέπει να δηλωθεί στατική.

Θα πρέπει να παρέχεται η προειδοποίηση του μεταγλωττιστή «κλήση λειτουργίας χωρίς πρωτότυπο». μια τέτοια προειδοποίηση θα πρέπει πάντα να θεωρείται σφάλμα.

Ο προγραμματιστής πρέπει να βεβαιωθεί ότι κάθε πρωτότυπο που καθορίζεται στο αρχείο κεφαλίδας αντιστοιχεί σε μια μη ιδιωτική (δηλαδή, μη στατική στη συνηθισμένη ορολογία C) συνάρτηση που υλοποιείται με το ίδιο όνομα στην ίδια ενότητα. Δυστυχώς, η φύση της γλώσσας C καθιστά τον αυτόματο έλεγχο αδύνατο.

Θα πρέπει να είστε καχύποπτοι για οποιαδήποτε χρήση του grep. Εάν το πρωτότυπο δεν βρίσκεται στη σωστή θέση, τότε πιθανότατα πρόκειται για σφάλμα.

Στην ιδανική περίπτωση, οι προγραμματιστές που εργάζονται στην ίδια ομάδα δεν θα πρέπει να έχουν πρόσβαση στα αρχεία πηγής του άλλου. Θα πρέπει να μοιράζονται μόνο ενότητες αντικειμένων και αρχεία κεφαλίδων.

Η προφανής δυσκολία είναι ότι λίγοι άνθρωποι θα ακολουθήσουν αυτούς τους κανόνες, επειδή ο μεταγλωττιστής δεν απαιτεί να τηρούνται αυστηρά. Μια αρθρωτή γλώσσα προγραμματισμού προστατεύει τουλάχιστον εν μέρει καλοί προγραμματιστέςαπό το χάος που δημιουργούν οι κακοί προγραμματιστές. Αλλά η γλώσσα C δεν μπορεί να το κάνει αυτό.



Εικόνα από smartagilee.com
Προβλήματα με δείκτες
Παρά όλες τις προόδους στη θεωρία και την πρακτική των δομών δεδομένων, οι δείκτες παραμένουν ένα πραγματικό εμπόδιο για τους προγραμματιστές. Η εργασία με δείκτες αντιπροσωπεύει ένα σημαντικό μέρος του χρόνου που αφιερώνεται για τον εντοπισμό σφαλμάτων ενός προγράμματος και είναι αυτοί που δημιουργούν τα περισσότερα από τα προβλήματα που περιπλέκουν την ανάπτυξή του.

Μπορείτε να διακρίνετε μεταξύ σημαντικών και ασήμαντων δεικτών. Σημαντικός στην κατανόησή μας είναι ο δείκτης που είναι απαραίτητος για τη δημιουργία και τη διατήρηση της δομής δεδομένων.

Ένας δείκτης θεωρείται ασήμαντος εάν δεν είναι απαραίτητο να υλοποιηθεί η δομή δεδομένων. Σε ένα τυπικό πρόγραμμα C, υπάρχουν πολύ περισσότεροι ασήμαντοι δείκτες από σημαντικούς. Υπάρχουν δύο λόγοι για αυτό.

Το πρώτο είναι ότι μεταξύ των προγραμματιστών που χρησιμοποιούν τη γλώσσα C, έχει γίνει παράδοση η δημιουργία δεικτών ακόμα και όταν υπάρχουν ήδη άλλες μέθοδοι πρόσβασης που δεν είναι σε καμία περίπτωση κατώτερες από αυτούς, για παράδειγμα, κατά την προβολή στοιχείων πίνακα.

Ο δεύτερος λόγος είναι ο κανόνας της γλώσσας C, σύμφωνα με τον οποίο όλες οι παράμετροι συνάρτησης πρέπει να περνούν κατά τιμή. Όταν χρειάζεστε το ισοδύναμο ενός Pascal VAR ή μιας εισόδου Ada, η μόνη λύση είναι να περάσετε έναν δείκτη. Αυτό εξηγεί σε μεγάλο βαθμό την κακή αναγνωσιμότητα των προγραμμάτων C.

Η κατάσταση χειροτερεύει όταν είναι απαραίτητο να περάσει ένας σημαντικός δείκτης ως παράμετρος εισόδου/εξόδου. Σε αυτή την περίπτωση, η συνάρτηση πρέπει να μεταβιβαστεί ένας δείκτης σε έναν δείκτη, κάτι που δημιουργεί δυσκολίες ακόμη και για τους πιο έμπειρους προγραμματιστές.

Si - ζωντανός

Σύμφωνα με στοιχεία του Ιουνίου 2016, ο δείκτης TIOBE, ο οποίος μετρά την αύξηση της δημοτικότητας των γλωσσών προγραμματισμού, έδειξε ότι η C κατατάσσεται στη 2η θέση:

Ας πει κάποιος ότι το C είναι ξεπερασμένο, ότι η ευρεία χρήση του είναι συνέπεια τύχης και ενεργού PR. Ας πει κάποιος ότι χωρίς το UNIX, η γλώσσα C δεν θα είχε δημιουργηθεί ποτέ.

Προσθήκη ετικετών(προφέρεται "si plus plus") είναι μια γλώσσα προγραμματισμού πολλαπλών παραδειγμάτων που υποστηρίζει αντικειμενοστραφή προγραμματισμό. Ο Bjarne Stroustrup της Bell Labs ανέπτυξε τη γλώσσα προγραμματισμού C++ κατά τη διάρκεια της δεκαετίας του 1980, χρησιμοποιώντας τη γλώσσα προγραμματισμού C ως βάση της. Χάρη σε μεγάλο βαθμό στην τεράστια δημοτικότητα της C, η γλώσσα προγραμματισμού C++ έγινε η πιο δημοφιλής γλώσσα κατά τη διάρκεια της δεκαετίας του 1990. Προγραμματισμός για αρχάριους. Και εξακολουθεί να χρησιμοποιείται ευρέως σε εμπορικές εφαρμογές μέχρι σήμερα. Η γλώσσα προγραμματισμού C++ έχει αντικαταστήσει τη C σε εμπορικές εφαρμογές επειδή επιτρέπει στους προγραμματιστές να αναπτύσσουν συστήματα διαρκώς αυξανόμενης πολυπλοκότητας χωρίς να εγκαταλείπουν τις ρίζες C (για παράδειγμα, βιβλιοθήκες γραμμένες σε απλό C). Μαζί με τον αντικειμενοστραφή σχεδιασμό, η σημερινή C++ διαφέρει από τη C στην υποστήριξή της για γενικό προγραμματισμό και μεταπρογραμματισμό προτύπων. Αυτό υλοποιείται μέσω ψευδωνύμων τύπου, ενσωματωμένων επεκτάσεων, προτύπων και // σχολίων σε στυλ σχολίου (αν και σημειώστε ότι ο C υιοθέτησε στη συνέχεια το σχόλιο //). Προγραμματισμός για ανδρείκελα.

Ιστορία της C++
Ο Stroustrup άρχισε να εργάζεται στη γλώσσα το 1979, εμπνευσμένος από το Simula67 ως πλαίσιο προγραμματισμού. Η AT&T χρησιμοποίησε για πρώτη φορά τη γλώσσα τον Αύγουστο του 1983. Ο αρχικός μεταγλωττιστής ονομαζόταν Cfront. Η πρώτη εμπορική κυκλοφορία έγινε τον Οκτώβριο του 1985. Η C++ τυποποιήθηκε από το ISO/IEC 14882-1998 το 1998.

Ιστορικό του ονόματος "C++"
Αυτός ο τίτλος ανήκει στον Rick Mascitti (μέσα του 1983) και χρησιμοποιήθηκε για πρώτη φορά τον Δεκέμβριο του 1983. Παλαιότερα, κατά την περίοδο έρευνας και ανάπτυξης της γλώσσας, ήταν σύνηθες να την αποκαλούν «Γ με τάξεις». Το τελικό όνομα προέρχεται από το C και τον τελεστή "++" (ο οποίος αυξάνει την τιμή μιας μεταβλητής κατά ένα) και την κοινή ονομασία με "+" για να υποδείξει τις βελτιωμένες δυνατότητες ενός προγράμματος υπολογιστή, για παράδειγμα: "Wikipedia +". (Με απλά λόγια, το σύμβολο συν σημαίνει τη βελτίωση του προγράμματος και την παροχή νέας λειτουργικότητας) Σύμφωνα με τον Stroustrup: "αυτό το όνομα υποδηλώνει την εξελικτική φύση της αλλαγής από το C." Αν και οι περισσότεροι κωδικοί C είναι έγκυροι για C++, ο C δεν είναι υποσύνολο της C++.
Μερικοί προγραμματιστές C έχουν σημειώσει ότι εάν δηλώσετε x=3; και y=x++; τότε όταν εκτελεστεί x= 4 και y = 3; αφού το x αυξάνεται αφού η τιμή του εκχωρηθεί στο y. Ωστόσο, αν γράψετε y=++x; , τότε y=4 και x=4 .
Μετά από αυτήν την εξέταση, ένα πιο κατάλληλο όνομα για τη C++ μπορεί στην πραγματικότητα να είναι ++C. Ωστόσο, η C++ και η ++C είναι προεκτάσεις της C, επομένως η μορφή C++ είναι πιο κοινή από την ++C.
Οι παιδαγωγοί μπορεί να παρατηρήσουν ότι μετά την εισαγωγή της C++, η γλώσσα C δεν άλλαξε μόνη της και ήταν περισσότερο ακριβές όνομαίσως «C+1».

Ιδιοκτησία C++
Κανείς δεν μιλάει C++. Η Stroustrup και η AT&T δεν λαμβάνουν δικαιώματα για τη χρήση της C++.

Πρόγραμμα "Γεια σου Wikipedia!"
Ο παρακάτω κώδικας μπορεί να μεταγλωττιστεί σε ένα πρόγραμμα που εκτυπώνει το κείμενο του μηνύματος.

Συμπεριλάβετε // Η κεφαλίδα απαιτείται για std::cout // Αρχή της συνάρτησης main() int main(int argc, const char**argv) ( // ( ... ) χρησιμοποιείται για να συμπεριλάβει μπλοκ κώδικα std:: cout<< "Hello, Wikipedia!\n"; // Outputs the text enclosed by "" return 0; }

Ορισμός τάξης

Συμπεριλάβετε τη χρήση std::string; κλάση InetMessage ( συμβολοσειρά m_subject, m_to, m_from; public: InetMessage (const string& θέμα, const string& to, const string& from); string θέμα () const; string to () const; string from () const; );

Βιβλιοθήκες C++
Οι τυπικές βιβλιοθήκες C++ είναι ως επί το πλείστον ένα υπερσύνολο των προτύπων βιβλιοθηκών C. Οι περισσότερες από τις βιβλιοθήκες της C++ περιλαμβάνουν την τυπική βιβλιοθήκη προτύπων (STL). Το STL παρέχει χρήσιμα εργαλεία όπως επαναλήπτες (που είναι σαν δείκτες υψηλού επιπέδου) και κοντέινερ (που είναι σαν πίνακες που μπορούν να αναπτυχθούν αυτόματα για να περιλαμβάνουν νέα στοιχεία). Όπως και στο C, η δυνατότητα πρόσβασης στη βιβλιοθήκη εμφανίζεται χρησιμοποιώντας την οδηγία #include για να συμπεριλάβει τυπικά αρχεία κεφαλίδας. Η C++ παρέχει πενήντα τυπικές κεφαλίδες που δεν έχουν καταργηθεί.

Το μέλλον της γλώσσας
Η γλώσσα προγραμματισμού C++ συνεχίζει να εξελίσσεται για να ανταποκρίνεται στις αυξανόμενες απαιτήσεις. Μέχρι σήμερα, οι προγραμματιστές μεταγλωττιστών και περιβάλλοντος ανάπτυξης συνεχίζουν να αγωνίζονται να υποστηρίξουν όλες τις δυνατότητες της C++ (περίπου το 2004), μια κατάσταση που έχει βελτιωθεί σημαντικά μεταξύ 1998 και 2003. Ειδικότερα, μια ομάδα, η Boost.org, έχει εργαστεί σκληρά για να κάνει τη γλώσσα προγραμματισμού C++ αυτό που τη γνωρίζουμε σήμερα και να συμβουλεύει την επιτροπή προτύπων για χαρακτηριστικά που λειτουργούν και χρειάζονται βελτίωση. Η τρέχουσα εργασία δείχνει ότι η C++ θα βασίζεται στην πολυπαραδειγματική φύση της όλο και περισσότερο. Η εργασία που δημοσιεύτηκε στο Boost.org, για παράδειγμα, επεκτείνει σημαντικά τις λειτουργικές και μετα-δυνατότητες του προγραμματισμού C++. Η C++ δεν έχει ακόμη κανένα πρότυπο για την ονομασία μεταβλητών και συναρτήσεων, καθιστώντας τον κώδικα που παράγεται από διαφορετικούς μεταγλωττιστές ασύμβατους.

ΛΥΡΙΚΗ ΕΙΣΑΓΩΓΗ.
Υπάρχει ένα τέτοιο μάθημα στη Σχολή Επιστήμης Υπολογιστών: YaSiTP (Γλώσσα C και θεωρία προγραμματισμού). Οι φοιτητές του ISIT το σπουδάζουν στο τρίτο έτος και, κατά κανόνα, δεν αντιμετωπίζουν ιδιαίτερα προβλήματα με αυτό. και άτυχοι φοιτητές με IC αναγκάζονται να ξεκινήσουν να σπουδάζουν προγραμματισμό με αυτό - από τις πρώτες εβδομάδες της παραμονής τους στο πανεπιστήμιο. όλα θα ήταν καλά - αν ένας μαθητής στο σχολείο σπούδαζε έστω και λίγο πληροφορική και γνωρίζει καλά τον Pascal - θα μάθει τη σύνταξη και θα συνεχίσει να καθοδηγείται από τη γλώσσα και τη διακριτή γλώσσα. τι γίνεται αν δεν έχεις διδάξει και δεν ξέρεις; δηλαδή έστω και εντελώς;
τότε η επιχείρησή σας είναι σκουπίδια\κακή.
πρώτον: μην κοιμάστε κατά τη διάρκεια των διαλέξεων του Khlebostroev. δεν υπάρχει πιο δύσκολο έργο από το να μην αποκοιμηθείς με τη μετρημένη φωνή του στο τέταρτο ζευγάρι, αλλά... όλα εξαρτώνται από σένα.
δεύτερον: ξεκινήστε να διαβάζετε ένα βιβλίο, για παράδειγμα http://www.ph4s.ru/bookprogramir_1.html εκεί θα βρείτε το βιβλίο του Bogatyrev «ένας πλήρης ηλίθιος οδηγός προγραμματισμού» ή κάτι άλλο του γούστου σας.
τρίτο και ίσως πιο σημαντικό: ΠΡΑΚΤΙΚΗ. για το οποίο θα μιλήσω.
Πριν προσπαθήσετε να γράψετε οτιδήποτε στο σπίτι, πρέπει να δημιουργήσετε το σωστό στούντιο. Με βάση την εμπειρία σχεδόν όλων των MKN 2012, το σετ του Vidul Studio 2010 C++ Express δεν λειτουργεί. Αυτό που είναι ΤΕΛΕΙΑ γραμμένο στους υπολογιστές στο πανεπιστήμιο, το διαβάζει με λάθος χωρίς δυνατότητα διόρθωσης. γιατί δεν είναι δική μας δουλειά, αναζητούμε το Visual Studio 2010 (2012) Ultimate (Visual Studio Ultimate 2012). για παράδειγμα εδώ: http://www.microsoft.com/visualstudio/ru... . Εγκαθιστούμε τη δοκιμαστική έκδοση, μετά την οποία μπορείτε να ξεκινήσετε την εξάσκηση.

(σημείωση 1:
αρχείο - πρόσθετες παράμετροι αποθήκευσης - Κυριλλικό έγγρ. τότε η κονσόλα θα διαβάζει κανονικά τα ρωσικά γράμματα.

ΣΗΜΕΙΩΣΗ2: για να λάβετε ένα πλήρες πρόγραμμα από τον παρουσιαζόμενο κώδικα, πρέπει να δημιουργήσετε ένα νέο έργο στο Visual Studio, να επιλέξετε το στοιχείο "κενό έργο", να καθορίσετε το όνομα του έργου, στον φάκελο "αρχεία πηγαίου κώδικα", δεξιά -Κάντε κλικ για να προσθέσετε ένα νέο στοιχείο "αρχείο C++", αντιγράψτε τον κώδικά μου στο παράθυρο που προκύπτει και μεταγλωττίστε τον (πλήκτρα ελέγχου + F5) και στη συνέχεια προσπαθήστε να γράψετε κάτι παρόμοιο μόνοι σας.)

ΠΡΑΚΤΙΚΗ.
Ο προγραμματισμός ξεκινά κλασικά με τη σύνταξη ενός βασικού προγράμματος "γεια σου κόσμο!"
Υπάρχουν πολλά θέματα στο φόρουμ σχετικά με αυτό το πρόγραμμα σε διαφορετικές γλώσσες εκτός της C++, οπότε εδώ είναι ο κώδικας:

#include "stdio.h" #include "conio.h" int main(int argc, char* argv) ( printf("Hello, World!\n"); )

Είναι επίσης χρήσιμο να γράψετε μερικά απλά προγράμματα αυτού του τύπου (για παράδειγμα, αυτό εμφανίζει το αποτέλεσμα μιας εξίσωσης με δεδομένα γνωστά εκ των προτέρων):

// tytytyty.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) ( int x , y , z; x = 9; y = 4; z = x*y; printf("%d", z) )

τότε πιο περίπλοκο (αυτό το πρόγραμμα διαβάζει δύο τιμές εισόδου και δίνει το αποτέλεσμα μιας εξίσωσης με τις εισαγόμενες τιμές):

#include "stdio.h" void main() ( int x , y , z; scanf("%d, %d", &x, &y); z = x*y; printf("%d", z); )

Το επόμενο πρόγραμμα που δόθηκε από τον δάσκαλο μετά το «γεια σου κόσμο!» μου φαινόταν κάπως έτσι:
συνθήκη: δίνεται ένα τετράγωνο και ένας κύκλος εγγεγραμμένος σε αυτό. βρείτε το μισό εμβαδόν του τετραγώνου που παραμένει εκτός του κύκλου, εάν η πλευρά του τετραγώνου είναι γνωστή.
διάλυμα:

#include "stdio.h" #include "math.h" #define PI 3.1415926535897932384626433832795 void main() ( double x; printf("εισαγάγετε την τιμή της πλευράς του τετραγώνου x = "); scanf("%lf", &x διπλό y = x / 2 διπλό z = PI * y * y;

ως επιλογή χρησιμοποιώντας τη σταθερή βιβλιοθήκη:

#define _USE_MATH_DEFINES #include "stdio.h" #include "math.h" void main() ( double x; printf("x = "); scanf("%lf", &x); double y = x / 2; διπλό f = x * x διπλό z = M_PI * y * y;

πρόγραμμα νούμερο πέντε από την εργασία δύο. συνθήκη: να λύσετε μια τετραγωνική εξίσωση με καθορισμένους συντελεστές.
εκτέλεση:

#include "stdio.h" #include "math.h" #include "conio.h" int main() ( float x , x1, sq, a, b, c; printf("Vvedite znachenija a, b, c: "); scanf("%f, %f, %f", &a, &b, &c); if (a == 0) ( x = - c / b; printf("%f", x); ) other ( float k; k = b * b - 4 * a * c; εάν (k< 0) { printf("Kornei net!"); } else if (k == 0) { x = - b / (2 * a); printf("%f", x); } else { sq = sqrt(k); x = (-b + sq) / (2 * a); x1 = (-b - sq) / (2 * a); printf("%f, %f", x, x1); } } getch(); return 0; }

(ΠΡΟΣΟΧΗ!! κατά τον καθορισμό βιβλιοθηκών, αντί για πινακίδες μεγαλύτερο από / μικρότερο, εμφανίζονται εισαγωγικά παντού)

ΜΕΤΑΛΟΓΟ: άλλες εργασίες θα προστεθούν αργότερα.