Caracteristicile programării C care o fac unică (și mai bună)

Caracteristicile programării C care o fac unică (și mai bună) / Programare

Limba de programare C este mama tuturor limbajelor moderne de programare. 10 Limbi de programare pe care probabil nu le-ați auzit de 10 limbi de programare pe care probabil nu le-ați auzit. Există câteva limbi de programare foarte ciudate și ciudate care s-au transformat logic pe cap și au reușit să rămână adevărat științei comunicării cu un calculator. Veți ... Citește mai mult. Aproape toate limbile utilizate astăzi includ mai multe caracteristici care au apărut pentru prima dată în limba C. Acesta a fost folosit pe scară largă pentru a scrie software-ul pentru cele mai mici microcomputere încorporate la cele mai mari mainframe și supercomputere.

Aplicații scrise în gama C într-o mare varietate de software-ul sistemului, software-ul desktop, software-ul întreprinderii, baze de date, etc Ai face foarte bine pentru a începe o carieră de programare 10 Programarea de locuri de muncă de locuri de muncă, care sunt în cerere chiar acum 10 locuri de muncă programarea calculatoarelor Cerere chiar acum Deoarece aterizarea unei lucrări de programare poate fi dificilă în peisajul actual, vă recomandăm să vă concentrați asupra uneia dintre următoarele concentrații pentru a vă îmbunătăți șansele de succes. Citește mai mult cu o cunoaștere a principiilor C.

O scurtă istorie a lui C

Dezvoltarea limbajului C este foarte strâns asociată cu Unix. Acesta a fost dezvoltat în jurul anului 1972, cu mai multe adăugări făcute în anii următori.

Înainte de a fi dezvoltat C, sistemul de operare Unix a fost dezvoltat pentru calculatorul PDP-7 folosind limba de asamblare. Mai târziu, un compilator pentru C a fost construit pe această platformă, din nou folosind limba de asamblare. În acest moment, C a fost proiectat pentru a ușura dezvoltarea Unixului în sine. Folosind acest compilator, Unix a fost rescris complet în C pentru calculatorul PDP-11. Și din nou, compilatorul limbajului C a fost rescris în C (ajutat, desigur, de excelentul Lex și yacc unelte), completând astfel procesul C / Unix Bootstrapping.

Principalul motiv pentru care Unix a fost rescris în C a fost pentru portabilitate. Deoarece limbile de asamblare pentru diferite arhitecturi ale procesorului Un ghid scurt pentru procesorul fantastic AMD Threadripper Un ghid scurt pentru procesorul AMD fantastic AMD a fost în salvarea CPU timp de mai mulți ani, dar se întoarce cu un bang masiv. AMD Threadripper este una dintre cele mai puternice CPU-uri de consum de pe piață, dar este potrivit pentru dvs.? Citiți mai multe sunt diferite, porting OS Unix la fiecare ar fi fost un efort semnificativ. Prin dezvoltarea unui a sistemelor cum ar fi C, și rescrierea sistemului de operare Unix în C, acest efort a fost redus cu câteva ordini de mărime.

Odată ce limbajul a fost dezvoltat, sa recunoscut că ar putea fi folosit pentru a scrie mult mai mult decât software-ul sistemului. Și astfel, C a început să fie folosit pentru scrierea de software, cum ar fi servere de fișiere, servere de baze de date, stack-uri de rețea, software desktop, (și mai târziu) servere web Cum să transformi un dispozitiv Android într-un server Web Cum să transformi un dispozitiv Android într-un Web Server Găzduiți propriul server web simplu și ieftin cu un smartphone sau tabletă Android. Citiți mai multe, etc.

În 1978, Brian Kernighan și Dennis Ritchie au publicat cartea Limba de programare C. Această carte a servit drept informală C Specificație limbă pentru mulți ani până în 1989, când C a fost standardizat în mod oficial de ANSI. Cea mai recentă versiune a C este C11, publicată în 2011.

Să ne uităm acum la unele caracteristici ale C care o fac unică.

C vs C ++: Sunt legate de ele?

Pe măsură ce software-ul mai complex a fost dezvoltat în C, sa recunoscut că conceptele orientate pe obiect, incluzând încapsularea, polimorfismul etc., ar ajuta la gestionarea complexității. Acest lucru a dus la dezvoltarea C ++ ca superset de C.

C ++ a fost construit prin adăugarea anumitor caracteristici pentru scrierea de software orientat pe obiecte, menținând în același timp compatibilitatea cu C. A fost dezvoltat cu ideea de îmbunătățire progresivă - făcând modificări compatibile în limba C, astfel încât modulele C și C ++ pot fi combinate în același program și compilate cu același compilator. Acest lucru a permis ca module mai vechi C să fie reutilizate, cu modificări minime într-un program mai mare, scris folosind concepte orientate pe obiecte.

Un program C poate fi, teoretic, compilat de un compilator C ++ fără a necesita modificări. În practică, totuși, verificarea mai strictă a tipului impusă de C ++ are drept rezultat erori, necesitând anumite modificări ale codului.

Număr mic de cuvinte cheie

Limba C a fost o limbă mică în ciuda puterii sale. Acest lucru se datorează faptului că declară doar 32 de cuvinte ca cuvinte cheie cu un anumit sens. Prin contrast, C ++ declară 82 de cuvinte cheie, java are 50 de cuvinte cheie rezervate și javascript are 63. Și COBOL declară 357 cuvinte cheie enorme. Imaginați-vă că durerea de cap trebuie să vă amintiți și să ocoliți un număr atât de mare de cuvinte cheie!

Nu există tipul de șir explicit

Spre deosebire de majoritatea celorlalte limbi moderne Pentru a construi o aplicație Android, trebuie să învățați aceste 7 limbi de programare pentru a construi o aplicație Android, trebuie să înveți aceste 7 limbi de programare Care limbaj de programare este potrivit pentru crearea de aplicații Android? Se referă la istoricul programării și la limbile în care vă simțiți mai confortabil. Din fericire, aveți opțiuni. Citiți mai multe, cum ar fi Java, C ++ și JavaScript, C nu oferă un tip separat pentru șiruri de caractere. Un șir este considerat o serie de caractere terminate de a 0 caractere (notat “\ 0”). Lungimea șirului este marcată de o convenție: numărul de caractere până la 0 caractere. Sunteți liber să ignorați și să numărați sau să păstrați trecutul “\ 0”. Această lipsă a tipului de șir și a convenției a dus la nenumărate buguri de-a lungul anilor, cunoscute sub numele de tampon de depășire.

De fapt, primul vierme care a lovit vreodată internetul, Morris Internet Worm, a fost rezultatul unui astfel de bug într-o piesă crucială a software-ului de sistem cunoscut sub numele de degetul daemon.

Iată un exemplu de astfel de eroare. Aceasta ilustrează cât de ușor este să introduci astfel de bug-uri într-un program. Programul se compilează bine, dar se blochează din cauza depășirii tamponului.

# include  main () char * buf = "salut lume"; buf [12] = 'a'; printf ("% s \ n", buf);  

În contrast, majoritatea limbilor moderne oferă un tip de șir explicit, care fac imposibilă o astfel de șansă. Chiar și C ++, care compilează codul de mai sus, oferă o explicație explicită std :: string tip.

Pointer Manipulation

Un pointer este o referință la o locație de memorie. C este complet flexibil atunci când vine vorba de citirea și scrierea locațiilor de memorie arbitrare. Această flexibilitate vine la un cost avantajos și a fost cauza multor bug-uri în întreaga gamă de software. Cele mai notabile și care afectează întregul internet includ erori în servere web, servere de mail și servere ftp. Chiar și astăzi, există ocazional știri despre bug-uri cauzate de referirea și actualizarea locațiilor de memorie invalide.

Infamul SSL HeartBleed bug-ul de securitate descoperit în 2014 a fost rezultatul unei gestionări necorespunzătoare a locațiilor indicatoarelor și ilustrează importanța crucială a managementului pointerului adecvat în C.

Chiar și ocazional BSOD (“ecranul albastru al morții”) erorile care sunt văzute pe sistemele Windows sunt, de asemenea, cauzate, probabil, de manipularea pointerului necorespunzător.

Alte limbi decât C ++ nu permit manipularea pointerilor și, prin urmare, nu sunt vulnerabile la aceste categorii de bug-uri.

Arrays și pointeri sunt interschimbabile

În referințele matricei C și indicii sunt interschimbabile. Limba permite folosirea unei referințe la array Cum se utilizează un Java ArrayList Cum se utilizează un Java ArrayList Un arrayist Java este o matrice de dimensiune generală care poate fi redimensionată. Oferă cele mai multe dintre facilitățile care se așteaptă în general din rețele în alte limbi. În acest articol veți învăța să configurați și să utilizați un arraylist. Citiți mai multe unde este necesar un cursor și invers. În timp ce acest lucru permite o manipulare puternică, aceasta a dus, de asemenea, la multe bug-uri infamous.

Utilizarea largă a “defini” macrocomenzi

Macrorele sunt folosite pentru a înlocui un nume pentru o expansiune diferită. Ele pot fi folosite pentru a schimba definiția unui nume la momentul compilării sau pentru a înlocui o expansiune mai lungă pentru un nume simplu. Sistemul de macrocomenzi C acceptă ifdef condiții care permit compilarea condiționată. Acesta este un mod de software este portat la diferite arhitecturi și sisteme de operare. Denumirile generice sunt definite și înlocuite la momentul compilării cu diferite expansiuni pentru diferite condiții.

Este, de asemenea, posibil să includeți sau să eliminați întregi secțiuni de cod de la a fi compilate utilizând aceste macrocomenzi Have A Razer Keyboard? Macro-urile de înregistrare sunt ușor de utilizat cu Synapse Aveți o tastatură Razer? Macrourile de înregistrare sunt utile cu Synapse Dacă utilizați periferice Razer, dar nu profitați de software-ul Synapse, vă lipsesc. Iată cum să utilizați în mod eficient macrocomenzile și cum pot suprasolicita jocurile dvs. Citeste mai mult .

Ele sunt depreciate dar sunt disponibile în C ++. Alte limbi, cum ar fi Java, JavaScript, Python, etc, nu oferă o facilitate similară.

Module încapsulate în fișiere

C nu are conceptul de clasă și, prin urmare, nu susține noțiunea de vizibilitate separată publică, privată și protejată. Singura încapsulare oferită de C este aceea a fișierelor. Funcțiile, variabilele și tipurile globale definite într-un fișier sursă sunt vizibile în acel fișier numai dacă nu sunt exportate numele. Cuvintele cheie static și extern sunt furnizate în scopul controlării vizibilității numelor variabile și a funcțiilor.

Dimpotrivă, alte limbi, cum ar fi C ++, Java și Python, suportă în general clase și încapsularea care merge cu clasele.

Biblioteci externe

Altele decât construcțiile de limbă de bază, funcționalitatea mai complexă în C este delegată la bibliotecile externe. Manipularea în șir, matematica, intrarea-ieșire, crearea de rețele etc. sunt furnizate de bibliotecile externe. În contrast, alte limbi provin, de obicei, dintr-o bibliotecă bine aprovizionată de module cu limbă în sine.

Și aceasta acoperă câteva caracteristici de bază ale limbajului C, în special cele care îl diferențiază de alte limbi.

Ai lucrat cu C? Ți-a plăcut sau ai prefera să lucrezi cu o altă limbă? Vă rugăm să explicați în comentariile de mai jos.

Explorați mai multe despre: Programare.