Διαφήμιση
Η γλώσσα προγραμματισμού C είναι η μητέρα όλων σύγχρονες γλώσσες προγραμματισμού 10 γλώσσες προγραμματισμού που πιθανώς ποτέ δεν έχετε ακούσει γιαΥπάρχουν κάποιες πολύ περίεργες και περίεργες γλώσσες προγραμματισμού που έχουν γίνει λογικές στο κεφάλι και έχουν κατορθώσει να παραμείνουν πιστοί στην επιστήμη της επικοινωνίας με έναν υπολογιστή. Πρόκειται να ... Διαβάστε περισσότερα . Σχεδόν κάθε γλώσσα που χρησιμοποιείται σήμερα περιλαμβάνει πολλά χαρακτηριστικά που εμφανίστηκαν για πρώτη φορά στη γλώσσα C. Έχει χρησιμοποιηθεί ευρέως για να γράψει λογισμικό για τους μικρότερους ενσωματωμένους μικροϋπολογιστές στα μεγαλύτερα mainframes και supercomputers.
Οι εφαρμογές που είναι γραμμένες σε σειρά C ποικίλλουν από λογισμικό συστήματος, επιτραπέζιο λογισμικό, επιχειρησιακό λογισμικό, βάσεις δεδομένων κ.λπ. Θα το κάνατε πολύ καλά ξεκινήστε μια καριέρα προγραμματισμού 10 Θέσεις Προγραμματισμού Υπολογιστών που είναι στη Ζήτηση Right NowΔεδομένου ότι η προσγείωση μιας εργασίας προγραμματισμού μπορεί να είναι δύσκολη στο σημερινό τοπίο, σκεφτείτε να εστιάσετε σε μία από τις παρακάτω συγκεντρώσεις για να βελτιώσετε τις πιθανότητες επιτυχίας σας. Διαβάστε περισσότερα με γνώση των βασικών στοιχείων του C.
Μια Σύντομη Ιστορία του Γ
Η ανάπτυξη της γλώσσας C συνδέεται στενά με το Unix. Αναπτύχθηκε γύρω στο 1972, με περισσότερες προσθήκες να γίνουν αργότερα.
Πριν αναπτυχθεί το C, το λειτουργικό σύστημα Unix αναπτύχθηκε για τον υπολογιστή PDP-7 χρησιμοποιώντας τη γλώσσα συναρμολόγησης του. Αργότερα ένας μεταγλωττιστής για το C χτίστηκε σε αυτήν την πλατφόρμα, και πάλι χρησιμοποιώντας τη γλώσσα συναρμολόγησης. Αυτή τη στιγμή, ο C σχεδιάστηκε για να διευκολύνει την ανάπτυξη του ίδιου του Unix. Χρησιμοποιώντας αυτόν τον μεταγλωττιστή, το Unix ξαναγράφηκε εντελώς στο C για τον υπολογιστή PDP-11. Και πάλι, ο μεταγλωττιστής γλώσσας C ξαναγράφηκε στο C (βοήθησε, φυσικά, από την εξαιρετική lex και yacc εργαλεία), ολοκληρώνοντας έτσι τη διαδικασία C / Unix Bootstrapping.
Ο κύριος λόγος για τον οποίο το Unix ξαναγράφηκε στο C ήταν για φορητότητα. Δεδομένου ότι οι γλώσσες συναρμολόγησης είναι διαφορετικές Αρχιτεκτονικές CPU Ένας σύντομος οδηγός για τη φανταστική CPU του Threadripper AMDΗ AMD βρισκόταν στην έρημο CPU για αρκετά χρόνια, αλλά είναι πίσω με ένα τεράστιο κτύπημα. Το AMD Threadripper είναι ένα από τα πιο ισχυρά CPUs στην αγορά, αλλά είναι σωστό για εσάς; Διαβάστε περισσότερα είναι διαφορετικά, μεταφέροντας το λειτουργικό σύστημα Unix σε κάθε ένα θα ήταν μια σημαντική προσπάθεια. Με την ανάπτυξη ενός γλώσσα συστημάτων όπως το C, και την επανεγγραφή του Unix OS στο C, αυτή η προσπάθεια μειώθηκε κατά αρκετές τάξεις μεγέθους.
Μόλις αναπτυχθεί η γλώσσα, αναγνωρίστηκε ότι θα μπορούσε να χρησιμοποιηθεί για να γράψει πολύ περισσότερο από το λογισμικό του συστήματος. Έτσι, το C άρχισε να χρησιμοποιείται για τη σύνταξη λογισμικού όπως διακομιστές αρχείων, διακομιστές βάσεων δεδομένων, στοίβες δικτύωσης, λογισμικό επιτραπέζιων υπολογιστών (και αργότερα) web servers Πώς να ενεργοποιήσετε μια συσκευή Android σε έναν διακομιστή WebΘέλετε να φιλοξενήσετε έναν απλό ιστότοπο χωρίς ένα ακριβό σχέδιο φιλοξενίας; Δείτε πώς μπορείτε να φιλοξενήσετε έναν ιστότοπο στο τηλέφωνο ή το tablet Android. Διαβάστε περισσότερα , και τα λοιπά.

Το 1978, ο Brian Kernighan και ο Dennis Ritchie δημοσίευσαν το βιβλίο Η Γ γλώσσα προγραμματισμού. Αυτό το βιβλίο χρησίμευσε ως άτυπη C Προδιαγραφή γλωσσών για πολλά χρόνια έως το 1989, όταν η C τυπικά τυποποιήθηκε από την ANSI. Η τελευταία έκδοση του C είναι C11, που δημοσιεύθηκε το 2011.
Ας δούμε τώρα ορισμένα χαρακτηριστικά του C που το καθιστούν μοναδικό.
C vs C + +: Είναι σχετικές;
Καθώς αναπτύχθηκε πιο πολύπλοκο λογισμικό στο C, αναγνωρίστηκε ότι οι αντικειμενοστραφείς έννοιες, συμπεριλαμβανομένης της εγκαψούλωσης, του πολυμορφισμού κ.λπ., θα βοηθούσαν στη διαχείριση της πολυπλοκότητας. Αυτό οδήγησε στην ανάπτυξη της C ++ ως υπερσύνολο του C.
Το C ++ δημιουργήθηκε με την προσθήκη ορισμένων χαρακτηριστικών για την εγγραφή αντικειμενοστραφούς λογισμικού, διατηρώντας παράλληλα τη συμβατότητα με το C. Αναπτύχθηκε με την ιδέα του προοδευτική βελτίωση - πραγματοποίηση συμβατών αλλαγών στη γλώσσα C, έτσι ώστε οι μονάδες C και C ++ να μπορούν να συνδυαστούν στο ίδιο πρόγραμμα και να συντάσσονται με τον ίδιο μεταγλωττιστή. Αυτό επέτρεψε την επαναχρησιμοποίηση παλαιότερων μονάδων C με ελάχιστες αλλαγές σε ένα μεγαλύτερο πρόγραμμα γραμμένο με αντικειμενοστραφή έννοιες.
Ένα πρόγραμμα C μπορεί, θεωρητικά, να συνταχθεί από έναν μεταγλωττιστή C ++ χωρίς να απαιτούνται αλλαγές. Στην πράξη, όμως, ο αυστηρότερος έλεγχος τύπου που επιβάλλεται από τη C ++ έχει ως αποτέλεσμα σφάλματα, που απαιτούν κάποιες αλλαγές στον κώδικα.
Μικρός αριθμός λέξεων-κλειδιών
Η γλώσσα C είναι μια μικρή γλώσσα, παρά τη δύναμή της. Αυτό συμβαίνει επειδή δηλώνει μόνο 32 λέξεις ως λέξεις-κλειδιά με συγκεκριμένο νόημα. Αντίθετα, η C ++ δηλώνει 82 λέξεις-κλειδιά, η java έχει 50 αποκλειστικές λέξεις-κλειδιά και το javascript έχει 63. Και η COBOL δηλώνει μια επιβλητική 357 λέξεις-κλειδιά. Φανταστείτε τον πονοκέφαλο της ανάγκης να θυμάστε και να παρακάμψετε έναν τόσο μεγάλο αριθμό λέξεων-κλειδιών!
Δεν υπάρχει τύπος ρητής συμβολοσειράς
Σε αντίθεση με τα περισσότερα άλλες σύγχρονες γλώσσες Για να δημιουργήσετε μια εφαρμογή Android, θα πρέπει να μάθετε αυτές τις 7 γλώσσες προγραμματισμούΠοια γλώσσα προγραμματισμού είναι κατάλληλη για τη δημιουργία εφαρμογών Android; Έρχεται κάτω από το ιστορικό προγραμματισμού και τις γλώσσες που αισθάνεστε πιο άνετα χρησιμοποιώντας. Ευτυχώς, έχετε επιλογές. Διαβάστε περισσότερα όπως το Java, C ++ και JavaScript, το C δεν παρέχει ξεχωριστό τύπο για χορδές. Μια συμβολοσειρά θεωρείται μια σειρά χαρακτήρων τερματισμένη από ένα 0 χαρακτήρα (υποδηλούμενη "\ 0"). Το μήκος της συμβολοσειράς υποδηλώνεται από μια σύμβαση: ο αριθμός των χαρακτήρων μέχρι το 0 χαρακτήρα. Είστε ελεύθεροι να το αγνοήσετε και να μετρήσετε ή να αποθηκεύσετε το παρελθόν του "\ 0". Αυτή η έλλειψη ενός σωστού τύπου χορδές και της σύμβασης έχει οδηγήσει σε αμέτρητα σφάλματα με την πάροδο των ετών, γνωστά ως υπερχείλισης buffer.
Στην πραγματικότητα, ο πρώτος σκουλήκι που έπληξε ποτέ το διαδίκτυο, ο Morris Internet Worm, ήταν το αποτέλεσμα ενός τέτοιου σφάλματος σε ένα κρίσιμο κομμάτι του λογισμικού συστήματος που είναι γνωστό ως δάχτυλο δαίμονα.
Ακολουθεί ένα παράδειγμα τέτοιου σφάλματος. Επεξηγεί πόσο εύκολο είναι να εισαχθούν τέτοια σφάλματα σε ένα πρόγραμμα. Το πρόγραμμα μεταγλωττίζει ωραία, αλλά καταρρέει λόγω της υπερχείλισης buffer.
# περιλαμβάνω κύριος() {char * buf = "γεια κόσμο"; buf [12] = 'a'. printf ("% s \ n", buf); }
Αντίθετα, οι περισσότερες σύγχρονες γλώσσες παρέχουν έναν ρητό τύπο συμβολοσειράς που καθιστά αδύνατες αυτές τις σκανδαλιές. Ακόμη και η C ++, η οποία συντάσσει τον παραπάνω κώδικα πρόστιμο, παρέχει μια σαφή std:: string τύπος.
Χειρισμός δείκτη
Ένας δείκτης είναι μια αναφορά σε μια θέση μνήμης. Το C είναι εντελώς ευέλικτο όταν πρόκειται για ανάγνωση και γραφή αυθαίρετων θέσεων μνήμης. Αυτή η ευελιξία έρχεται με μεγάλο κόστος και έχει προκαλέσει πολλά σφάλματα στο φάσμα του λογισμικού. Τα πιο αξιοσημείωτα και επηρεάζουν ολόκληρο το διαδίκτυο περιλαμβάνουν τέτοια σφάλματα σε διακομιστές ιστού, διακομιστές αλληλογραφίας και διακομιστές ftp. Ακόμα και σήμερα, υπάρχουν περιστασιακά ειδήσεις σχετικά με τα σφάλματα που προκαλούνται από την αναφορά και την ενημέρωση των μη έγκυρων τοποθεσιών μνήμης.

Το διαβόητο SSL HeartBleed το σφάλμα ασφαλείας που ανακαλύφθηκε το 2014 ήταν το αποτέλεσμα ακατάλληλης διαχείρισης των θέσεων δείκτη και απεικονίζει την κρίσιμη σημασία της σωστής διαχείρισης δείκτη στο C.
Ακόμη και τα περιστασιακά σφάλματα BSOD ("μπλε οθόνη του θανάτου") που παρατηρούνται στα συστήματα των Windows είναι επίσης πιθανόν να οφείλονται σε ακατάλληλο χειρισμό δείκτη.
Γλώσσες διαφορετικές από τη C ++ δεν επιτρέπουν τη χειραγώγηση του δείκτη και έτσι δεν είναι ευάλωτες σε αυτές τις κατηγορίες σφαλμάτων.
Οι πίνακες και οι δείκτες είναι εναλλάξιμοι
Στις αναφορές συστοιχιών C και οι δείκτες είναι εναλλάξιμοι. Η γλώσσα επιτρέπει τη χρήση ενός αναφορά πίνακα Πώς να χρησιμοποιήσετε ένα Java ArrayListΈνας Java arraylist είναι ένας γενικής χρήσης πίνακα αλλαγής μεγέθους. Παρέχει τις περισσότερες από τις εγκαταστάσεις που αναμένεται γενικά από συστοιχίες σε άλλες γλώσσες. Σε αυτό το άρθρο θα μάθετε να ρυθμίζετε και να χρησιμοποιείτε έναν αρραθότυπο. Διαβάστε περισσότερα όπου απαιτείται δείκτης και αντιστρόφως. Παρόλο που αυτό επιτρέπει ισχυρούς χειρισμούς, έχει επίσης οδηγήσει σε πολλά διαβόητα σφάλματα.
Ευρεία χρήση των μακροεντολών "define"
Οι μακροεντολές χρησιμοποιούνται για να υποκαταστήσουν ένα όνομα για διαφορετική επέκταση. Μπορούν να χρησιμοποιηθούν για να αλλάξουν τον ορισμό ενός ονόματος κατά το χρόνο σύνταξης ή για να αντικαταστήσουν μια μεγαλύτερη επέκταση για ένα απλό όνομα. Το σύστημα μακροεντολών C υποστηρίζει ifdef όρους που επιτρέπουν την σύνταξη υπό όρους. Αυτό είναι ένα τρόπο που το λογισμικό μεταφέρεται σε διαφορετικές αρχιτεκτονικές και λειτουργικά συστήματα. Τα γενικά ονόματα ορίζονται και αντικαθίστανται κατά τον χρόνο σύνταξης με διαφορετικές επεκτάσεις για διαφορετικές συνθήκες.
Είναι επίσης δυνατή η συμπερίληψη ή η εξάλειψη ολόκληρων τμημάτων του κώδικα από τη σύνταξη χρησιμοποιώντας αυτές τις μακροεντολές Έχετε ένα πληκτρολόγιο Razer; Η εγγραφή μακροεντολών είναι εύκολη με τη συνάφειαΑν χρησιμοποιείτε περιφερειακά Razer αλλά δεν εκμεταλλεύεστε το λογισμικό Synapse, λείπετε. Δείτε πώς μπορείτε να χρησιμοποιήσετε αποτελεσματικά τις μακροεντολές και πώς μπορούν να επιβαρύνουν το παιχνίδι σας. Διαβάστε περισσότερα .
Απορρίπτονται αλλά διατίθενται στην C ++. Άλλες γλώσσες όπως Java, JavaScript, Python κ.λπ. δεν παρέχουν παρόμοια δυνατότητα.
Ενότητες ενσωματωμένες σε αρχεία
Ο C δεν έχει την έννοια μιας τάξης και επομένως δεν υποστηρίζει την έννοια της ξεχωριστής δημόσιας, ιδιωτικής και προστατευμένης ορατότητας. Η μόνη ενθυλάκωση που παρέχεται από το C είναι αυτή των αρχείων. Οι λειτουργίες, οι συνολικές μεταβλητές και οι τύποι που ορίζονται μέσα σε ένα αρχείο προέλευσης είναι ορατά μέσα σε αυτό το αρχείο μόνο αν εξάγονται τα ονόματα. Οι λέξεις-κλειδιά στατικός και εξωτερικά παρέχονται για τον έλεγχο της ορατότητας των ονομασιών μεταβλητών και λειτουργιών.
Αντίθετα, άλλες γλώσσες, όπως η C ++, η Java και η Python, γενικά υποστηρίζουν τάξεις και την ενθυλάκωση που συνοδεύει τις τάξεις.
Εξωτερικές Βιβλιοθήκες
Εκτός από τις βασικές γλωσσικές δομές, η πιο σύνθετη λειτουργικότητα στο C μεταβιβάζεται σε εξωτερικές βιβλιοθήκες. Ο χειρισμός των συμβολοσειρών, τα μαθηματικά, η είσοδος-έξοδος, η δικτύωση κ.λπ. παρέχονται από εξωτερικές βιβλιοθήκες. Αντίθετα, άλλες γλώσσες συνήθως έρχονται με μια καλά αποθηκευμένη βιβλιοθήκη μονάδων με την ίδια τη γλώσσα.
Και αυτό καλύπτει ορισμένα βασικά χαρακτηριστικά της γλώσσας C, ειδικά εκείνα που την διαφοροποιούν από άλλες γλώσσες.
Έχετε εργαστεί με το C; Μήπως σας άρεσε ή θα προτιμούσατε να συνεργαστείτε με κάποια άλλη γλώσσα; Παρακαλείσθε να εξηγήσετε στα παρακάτω σχόλια.