Sunteți pe pagina 1din 12

C (limbaj de programare) - Wikipedia

Page 1 of 12

C (limbaj de programare)
De la Wikipedia, enciclopedia libera

C este un limbaj de programare standardizat, compilat, de nivel mediu. Este implementat pe majoritatea platformelor de calcul existente azi, ?i este cel mai popular limbaj de programare pentru scrierea de software de sistem. Este apreciat pentru eficien ? a codului obiect pe care l poate genera, ?i pentru portabilitatea sa. A fost dezvoltat la nceputul anilor 1970 de Ken Thompson ?i Dennis Ritchie, care aveau nevoie de un limbaj simplu ?i portabil pentru scrierea nucleului sistemului de operare UNIX.

Sintaxa limbajului C a stat la baza multor limbaje create ulterior ?i nca populare azi: C++, Java , JavaScript, C#.
C este un limbaj de programare relativ minimalist ce opereaza n strnsa leg atura cu hardware-ul, fiind cel mai apropiat de limbajul de asamblare fa ? de majoritatea celorlalte limbaje de a programare.

Cuprins
n n n n n n

n n n

1 Scurta introducere n C 2 Un exemplu de program C ("Hello World!") 3 Tipuri de date 4 Alocarea memoriei 5 Sintaxa 6 Istoric n 6.1 nceputurile limbajului de programare C n 6.2 K&R C n 6.3 ANSI C ?i ISO C n 6.4 C99 7 Diferen? ntre C, C++ ?i Pascal e n 7.1 Compara? cu limbajul Pascal ie n 7.2 C ?i C++ n 7.3 Exemplu 8 Vezi ?i 9 Bibliografie 10 Legaturi externe

The C Programming Language Limbajul de programare C , de Brian Kernighan ?i Dennis Ritchie, edi? ia originala ce a servit pentru mul? ani i ca manual de referin? al limbajului a C.

Scurta introducere n C
C este prezentat uneori ca "asamblor portabil", facndu-se astfel diferen ? principale fa? de limbajele ele a de asamblare: codul unui program C poate fi compilat ?i rulat pe aproape orice tip de ma ?ina (calculator), asemanator altor limbaje de programare, n timp ce limbajele de asamblare sunt specifice

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 2 of 12

unui anumit model de ma?in a. Limbajul C apar ? clasei limbajelor de nivel scazut sau de nivel mediu , ine aceasta indicnd strnsa legatura ntre interoperabilitate ?i echipamentul hardware.

C a fost creat avnd drept scop important de a face ca programele mari sa poata fi scrise mai u ?or ?i cu mai pu? erori n paradigma programa rii procedurale, dar fara a pune un obstacole n scrierea ine compilatorului de C, care este ncarcat de caracteristicile complexe ale limbajului. C are urmatoarele caracteristici importante:
n

n n

n n n n n

Este un limbaj de baza simplu, cu importante func ? ionalita? cum ar fi func? matematice sau i iile cele de manipulare ale fi ?ierelor Este focalizat pe paradigma programarii procedurale, care faciliteaza programarea ntr-un mod structurat Utilizeaza un set simplu de tipuri de date ce mpiedica multe opera ? neinten? ii ionate Folose?te un limbaj preprocesor, preprocesorul C, pentru sarcini cum ar fi definirea de macrouri ?i includerea mai multor fi ?iere sursa Permite accesarea la nivel scazut a memoriei calculatorului prin utilizarea pointerilor Permite folosirea parametrilor, care sunt comunica? func? i iilor prin valoare ?i nu prin referin? a Pointeri la func? ce permit forme rudimentare de nchidere (engleza closure ) ?i polimorfism ii, Declararea variabilelor Structuri de date sau tipuri de date agregate, definite de utilizator prin (struct), ce permit ca date nrudite sa fie combinate ?i manipulate ca un ntreg

Printre caracteristicile ce lipsesc n C, dar care pot fi gasite n alte limbaje de programare se enumera:
n n n n n n n n

Un sistem automat de colectare a reziduurilor (de memorie) (englez a Garbage collection) Clasele ?i obiectele (programarea orientata pe obiecte) Un sistem avansat de tipuri de date Programarea generica Suprancarcarea Metaprogramarea Suport nativ pentru programarea multifir (engleza multithreaded ) ?i func? de re? iile ea Procesarea listelor

De?i lista minusurilor limbajului C este destul de lung a, aceasta nu reprezinta un dezavantaj suficient de mare pentru inhiba utilizarea limbajului C n practica, deoarece permite ca noi compilatoare sa poata fi scrise pe noi tipuri de platforme ?i pentru ca permite programatorului sa ? a bine sub control programul in pe care l scrie. Acesta este unul din motivele care f un cod scris n C sa fie mult mai eficient dect daca ar fi scris n alte limbaje de programare. Numai un cod scris cu foarte mare grija ntr-un limbaj de asamblare poate fi mai performant, deoarece are control integral asupra ma?inii, dar performan? a avansata a compilatoarelor, combinata cu complexitatea noilor tipuri de procesoare, a facut ca limbajul C sa fie preferat ?i sa fie acceptat din ce n ce mai mult de programatori.
Una din consecin? acceptarii ?i eficien ? C -ului este aceea ca multe compilatoare, biblioteci ?i ele ei interpretoare ale limbajelor de nivel nalt sunt adesea implementate n C.

Un exemplu de program C ("Hello World!")


Urmatorul exemplu de program a aparut n prima edi? a car? lui Brian Kernighan ?i Dennis Ritchie ?i ie ii

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 3 of 12

a devenit un exemplu standard de program introductiv n marea majoritate a car? de programare, ilor indiferent de limbajul de programare. Programul afi?eaza Hello, World! la ie ?irea standard, care este, de obicei, un terminal sau monitor. Poate sa fie, totu?i, ?i un fi?ier sau alt dispozitiv hardware, depinznd de maparea ie?irii standard n momentul execu ? programului. iei

#include <stdio.h> main() { printf("Hello, World!\n"); }


Programul prezentat mai sus va fi compilat corect de m ea majoritate a compilatoarelor moderne. Totu?i, va produce unele mesaje de avertizare daca va fi compilat de un compilator ce respecta standardul ANSI C. Mai mult, codul nu va fi compilat, returnnd mesaje de eroare, daca se respecta standardele C99, deoarece variabila de ntors, de tip int, nu va putea fi dedusa daca nu a fost specificata n codul sursa. Aceste mesaje pot fi eliminate, aducnd cteva schimbari minore programului original:

#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; }


Urmeaza o discu? linie cu linie a programului prezentat mai sus: ie

#include <stdio.h>
Prima linie a programului reprezinta o directiv a preprocesor, #include. Aceasta face ca preprocesorul primul utilitar ce examineaza codul sursa cnd acesta este compilat sa substituiasca linia respectiva cu con ? inutul unui fi?ier sau al entita? la care se face referire. n acest caz, fi?ierul header ii ("antet") stdio.h care con? defini? func ? ine iile iilor de manipulare a intrarii ?i ie ?irii standard va nlocui acea linie. Parantezele unghiulare ce cuprind stdio.h indica prezen? acelui fi?ier n una din a loca? date preprocesorului prin calea de cautare (englez a search path ) a fi?ierelor header (aceste iile fi?iere se afla n directorul "include" al platformei, respectiv compi atorului folosit).

int main(void)
Urmatoarea linie define ?te func ? numita main. Func? main are un loc bine stabilit n programele C. ia ia Cnd un program C este executat, aceasta este prima func? executata (punctul de intrare n program). ie Prezen? acesteia este obligatorie pentru ca un program sa poata fi executat. Por? a iunea de cod int indica faptul ca valoare ntoarsa valoare pe care func ? main o va ntoarce procesului apelant este un ia ntreg. (void) indic a faptul ca func? main nu prime?te nici un argument la apelare. ia

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 4 of 12

Paranteza acolada deschisa indica nceputul codului pentru func ? main. ia

printf("Hello World\n");
Aceasta linie apeleaza cauta ?i executa codul func ? printf, care a fost definita n fi?ierul header ia stdio.h. n cadrul acestui apel, func? printf i este pasat (transmis) un singur argument, ?irul de iei caractere "Hello, World!\n". Secven ? \n este denumit a secven? escape (cu semnifica ? speciala ), a a ie care se traduce prin caracterul EOL ( end-of -line, sfr ?itul liniei), pentru a muta cursorul pe linia urmatoare. Valoarea de ntoarcere a func? printf este un ntreg int, dar nu este folosita n acest caz iei (este "ignorata").

return 0; Aceasta instruc? iune termina execu? codului func? main ?i face ca aceasta sa ntoarca valoarea 0 ia iei procesului apelant, n cazul acesta sistemului de operare. }
Paranteza acolada nchisa indica terminarea codului func? main. iei Compatibilitatea totala cu alte compilatoare ce respecta standardul C99 poate fi insa atinsa prin urmatorul cod:

#include <stdio.h> #include <stdlib.h> int main(void) { printf("Hello world!\n"); return EXIT_SUCCESS; }
Constanta EXIT_SUCCESS este definita n headerul stdlib.h, de aceea a fost necesara includerea sa. Pe majoritatea platformelor aceasta constanta are valoarea zero.

Tipuri de date
C are un sistem de tipuri de date similar cu cel al descenden ? ALGOL, cum ar fi Pascal, dar totu?i cu ilor anumite diferen ? Cuprinde tipuri de date cum ar fi ntregi de diferite dimensiuni, cu sau fara semn, e. numere n virgula mobila, enumer ari (enum), structuri de date ( struct) ?i uniuni (union).
C utilizeaza foarte mult pointerii, un tip de referin? foarte simplu, care pastreaza adresa loca? din a iei memorie. Adresa poate fi manipulata cu ajutorul atribuirilor ?i a aritmeticii pointerilor . n momentul rularii unui program, un pointer reprezinta o adresa de memorie. n momentul compilarii, un pointer este un tip de data complex, ce reprezint a att adresa de memorie ct ?i tipul de data. Acest lucru permite expresiilor ce utilizeaza pointeri sa fie evaluate dupa tipul de data. Pointerii au mai multe utiliz ari n C. De exemplu, ?irurile de caractere (englez a text string ) sunt adesea reprezentate printr-un pointer la un vector de caractere. Alocarea dinamica a memoriei este realizata tot cu ajutorul pointerilor.

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 5 of 12

Un pointer null are o valoare rezervata, indicnd faptul ca face referire la o loca? nevalid a. Acest lucru ie este folositor n cazuri speciale cum ar fi pointerul next (urmatorul) n nodul final al unei liste nlan? . uite Dereferen? ierea unui pointer null poate cauza un comportament imprevizibil al aplica? De asemenea, iei. exista ?i pointeri de tip void, fapt ce indica referirea la un obiect de tip necunoscut. Ace?ti pointeri sunt foarte folositori n programarea generica . Deoarece dimensiunea ?i tipul obiectelor la care acest tip de pointeri face referire sunt necunoscute, ace?tia nu pot fi dereferen? ? dar pot fi converti? la alt tip de ia i, i pointeri. n C, anterior standardului C99, tablourile (vectorii) sunt de dimensiune fixa, statica, cunoscuta la momentul compila rii; n practica, acest lucru nu reprezinta o piedica, avnd n vedere ca se pot aloca blocuri de memorie n momentul rularii, tratndu-le ca pe tablouri utiliznd libra ria standard. Spre deosebire de multe alte limbaje de programare, C reprezinta tablourile ca ?i pe pointeri: o adresa ?i un tip de data. Prin urmare, valorile index pot depa?i dimensiunea actuala a unui tablou.

De asemenea, C ofera posibilitatea de lucru cu tablouri multidimensionale. n punct de vedere semantic, tablourile multidimensionale sunt tablouri de tablouri, dar, din punct de vedere fizic, acestea sunt stocate ca un singur tablou unidimensional cu un offset calculat.
C este adesea folosit n programarea de nivel scazut, unde poate fi necesar ca un ntreg sa fie tratat ca o adresa de memorie, un numa r n virgula mobila ca un ntreg sau un tip de pointer ca un alt tip de pointer. Pentru astfel de cazuri C ofera operatorul de casting, care for? eaza explicit conversia unei valori dintr-un tip de data n alt tip de data.

Alocarea memoriei
Una din cele mai importante func ? ale unui limbaj de programare este ca acesta sa furnizeze metode de ii management a memoriei ?i al obiectelor stocate n memorie. C furnizeaz a trei metode distincte de alocare a memoriei pentru obiecte:
n

Alocarea statica a memoriei: adresele ?i dimensiunile obiectelor ce fac uz de alocarea statica a memoriei sunt fixate n momentul compilarii ?i pot fi plasate ntr-o zon a de dimensiune fixa ce corespunde unei sec? iuni din cadrul fi?ierului linkedidat final. Acest tip de alocare a memoriei se nume?te statica deoarece loca? ?i dimensiunea lor nu variaza pe durata de execu ? a ia ie programului. Alocarea automata a memoriei: obiectele temporare (variabilele locale declarate n cadrul unui bloc de cod) sunt stocate n cadrul de stiv a asociat func ? apelate, iar spa? alocat este automat iei iul eiberat ?i reutilizat dupa ce s-a parasit blocul n care acestea au fost declarate. Alocarea dinamica a memoriei: blocuri de memorie de orice dimensiune pot fi alocate ntr-o zona de memorie numita heap prin intermediul func? iilor malloc(), calloc() ?i realloc(). Aceste blocuri de memorie pot fi reutilizate dupa ce zona de memorie a fost eliberata prin apelul func? free(). iei

Nu toate variabilele sunt automat alocate. Urmatoarele tipuri de variabila sunt alocate static:
n n

toate variabilele globale, indiferent daca au fost sau nu declarate ca statice; variabilele locale declarate explicit ca fiind statice.

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 6 of 12

Variabilele alocate static au alocata loca? lor de memorie ?i ini? ia ializata nainte ca func? main sa fie ia executata ?i nu sunt dealocate pna cnd se termina execu ? func ? main. Variabilele alocate static nu ia iei sunt reini? ializate la fiecare apel al func ? n cadrul carora au fost declarate. O variabila alocat a static iei are avantajul ca ?i pastreaza valoarea, chiar daca func? care acceseaz a acea valoare nu mai sunt iile active. Acolo unde este posibil, alocarea automata sau statica este preferata deoarece alocarea memoriei este coordonata de compilator, nemaifiind nevoie ca programatorul sa aloce iar apoi sa elibereze memoria opera? ce adesea genereaza erori. Totu?i, multe structuri de date sunt variabile n dimensini ?i ie deoarece alocarea automata ?i cea statica trebuie sa fie de dimensiune fixa n momentul compilarii, sunt multe situa ? n care alocarea dinamica trebuie folosita. Un exemplu ar fi tablourile de dimensiuni ii variabile.

Sintaxa
Vezi ? i Sintaxa limbajului C
Spre deosebire de alte limbaje de programare cum ar fi Fortran 77 , C-ul are o forma libera, la snd programatorul sa-?i organizeze codul folosind spa? albe. Comentarii pot fi nserate oriunde n cadru iile programului utiliznd delimitatorii /* ?i */. Fiecare fi?ier sursa con ? declara? de variabile ?i defini ? de func? Func? ine ii ii ii. iile, la rndul lor, con? in alte declara? de variabile ?i comenzi. Declara? de variabile fie definesc noi tipuri folosind cuvinte ii iile cheie precum struct, union ?i enum sau atribuind un tip de date predefinite, prin scrier pului de data ?i urmat de numele variabilei. Cuvinte cheie precum char, int, precum ?i pointerul la unul din aceste tipuri * reprezinta tipuri de date implementate nativ n C. Sec ? iuni de cod sunt incluse ntre paranteze acolade ({ ?i }), pentru a indica pentru ce por? iune a codului se aplica declara? de variabile iile ?i celelalte structuri de control.

Comenzile executa ac? iuni cum ar fi cele de modificare ale valorii unei variabile sau afi ?area unui text la consola. Structurile de control sunt variabile pentru execu? condi? ii ionale sau itera ? realizate cu ii, ajutorul cuvintelor rezervate if, else, switch, do, while ?i for. Salturi arbitrare sunt posibile prin folosirea cuvntului cheie goto. Cu ajutorul unei varieta? de operatori implementa? n C, se pot realiza i i opera? aritmetice, logice, comparative, pe bi? indexarea tablourilor ?i atribuiri. Comenzile pot de ii i, asemenea apela func? incluznd un numar mare de func? din bibliotecile standard ale limbajului C, ii, ii necesare pentru realizarea diferitelor sarcini cerute de programator.

Istoric
nceputurile limbajului de programare C
Etapa ini? de dezvoltare a limbajului de programare C a avut loc n cadrul laboratoarelor AT&T Bell iala ntre anii 1969 ?i 1973. Dupa spusele lui Dennis Ritchie, cea mai creativ a perioada a avut loc n 1972. A fost denumit C deoarece multe din caracteristicile sale au fost derivate din limbajul de programare B.

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 7 of 12

Sunt multe legende despre originea limbajului C ?i legatura sa cu sistemul de operare Unix, cum ar fi:
n

Dezvoltarea limbajului C a fost rezultatul dorin? programatorilor de a juca un joc de tipul ei Asteroids. Ace?tia l jucau pe calculatorul principal al companiei, d r din lipsa de resurse ?i datorita faptului ca acesta trebuia s a suporte mai mult de 100 de utilizatori, Thompson ?i Ritchie, nemul? ? de controlul pe care l aveau asupra navei n ncercarea de a evita asteroizii, au decis umi i sa porteze jocul pe un PDP-7, nefolosit, din birou. Dar aceast a ma?ina nu avea un sistem de operare, a?a ca au hotart sa scrie unul. Au decis ca eventual sa porteze acest sistem de operare pe ma?inile PDP -11 pe care ace?tia le foloseau n birou, dar era o munca destul de dificila avnd n vedere ca totul era scris n limbaj de asamblare. A?a ca au decis sa foloseasca un limbaj portabil de nivel nalt astfel nct sistemul de operare sa poata fi portat cu u?urin? de pe un computer pe a altul. Au ncercat folosind limbajul de programare B, ar i lipseau unele din func ? ionalita? care ile ar fi facut facila folosirea unor caracteristici avansate a ma?inii PDP-11. Astfel, a ap arut un nou limbaj de programare, numit C. Justificarea pentru ob? inerea primului computer care a fost utilizat pentru dezvoltarea sistemului de operare Unix a fost acela de a crea un sistem pentru a automatiza completarea autoriza? iilor. Prima versiune a sistemului de operare Unix a fost scrisa n limbaj de asamblare. Mai trziu, limbajul de programare C a fost folosit pentru a rescrie sitemul de operare.

ncepnd cu anul 1973, limbajul de programare C a devenit destul de robust, astfel nct mare parte a kernelului Unix, scris ini? n limbaj de asamblare pentru PDP 11/20, a fost rescris n C. Acesta a fost ial unul din primele kernele ale unui sistem de operare scris ntr-un limbaj de programare, altul dect limbajul de asamblare. ncercari anterioare au fost pentru scrierea sistemului Multics (scris n PL/I) ?i TRIPOS (scris n BCPL).

K&R C
n 1978, Dennis Rithie ?i Brian Kernighan au publicat prima edi? a c ar? Limbajul de programare C ie ii (eng. The C Programming Language ). Aceasta carte, cunoscuta n cercul programatorilor sub numele K&R, a servit pentru mul? ani ca un mijloc de informare asupra specifica? i iilor limbajului C. Versiunea limbajului C descrisa este cunoscuta sub numele K&R C .
K&R aduce n discu? urmatoarele caracteristici ale limbajului: ie
n n n n

Tipul de data struct Tipul de data long int Tipul de data unsigned int Operatorul =+ a fost schimbat n +=, precum ?i ceilal ? operatori nrudi ? (=+ producea confuzii i i analizorului lexical al compilatorului limbajului C; de exemplu: i += 10 comparat cu i = +10).

K&R C este adesea considerat limbajul de baza pe care orice compilator C trebuie sa-l suporte. Pentru mul? ani, chiar ?i dupa introducerea standardului ANSI C, a fost considerat ca fiind cel mai mic i numitor comun pe care programatorii n C trebuie sa-l respecte atunci cnd se vorbe ?te de portabiliitate maxima, deoarece nu toate compilatoarele sunt scrise nc a sa suporte standardul ANSI C, iar o secven ? a de cod scrisa n K&R C respecta ?i ANSI C. n primele versiuni C, numai func? care returnau o valoare non-integer trebuiau s a fie definite sau iile declarate nainte de folosire. Despre o func? folosita fara ca aceasta sa fi fost declarata n prealabil se ie

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 8 of 12

presupunea ca ntoarce un ntreg. Parametrii func? iilor nu erau verifica? dupa tip, totu?i unele i compilatoare afi?au un mesaj de aten ? ionare daca o func? era apelata cu un num ar gre?it de argumente. ie n anii ce au urmat publica? K&C R, cteva caracteristici neoficiale au fost adaugate limbajului C, iei fiind suportate de compilatoarele celor de la AT&T, precum ?i de al? producatori. Acestea includ: i
n n n n n n n n

func? void ?i tipul de date void * iile func? care ntorc tipul struct sau union iile numele cmpurilor unei structuri struct ntr-un spa? de nume pentru fiecare tip de structura iu atribuirea pentru tipurile de date de tip struct calificatorul const pentru a face un obiect de tip read only o biblioteca standard ncorpornd func? implementate de diver?i dezvoltatori ii enumera? iile tipul float n precizie simpla.

ANSI C ? i ISO C
La sfr?itul anilor 1970, C a nceput s a nlocuiasca limbajul BASIC devenind cel mai utilizat limbaj de programare. n anii 1980 a fost adoptat ?i de calculatoarele IBM PC, popularitatea acestuia ncepnd sa creasca semnificativ. n acest timp, Bjarne Stroustrup mpreun a cu al? colegi de la Bell Labs au nceput i sa adauge limbajului C caracteristici ale programa rii orientate pe obiecte. Limbajul rezultat a fost denumit C++ ?i este cel mai popular limbaj de programare pe sistemele de operare Microsoft Windows; totu?i C-ul r amne cel mai popular limbaj de programare n Unix. Alt limbaj de programar ezvoltat n acea vreme se nume?te Objective-C care adauga de asemenea C -ului caracteristici ale programa rii orientate pe obiecte. De?i nu la fel de popular ca C++, Obejective-C este folosit pentru dezvoltarea aplica? iilor pe ce folosesc interfa ? Cocoa a sistemului de operare Mac OS X. a n 1983, American National Standards Institute (ANSI) a format un comitet, X3J11 , pentru a stabili specifica? unui limbaj C standard. Dupa un proces ndelungat, standardul a fost terminat n 1989 ?i iile ratificat ca ANSI X3.159-1989 "Programming Language C". Aceast a versiune a limbajului ne este cunoscuta sub numele ANSI C . n 1990 , standardul ANSI C (cu mici modificari) a fost adoptat de International Organization for Standardization (ISO) ca ISO/IEC 9899:1990 .
Una din ? intele procesului de standardizare ANSI C a fost acela de a produce un superset al K&C R, ncorpornd multe dintre caracteristicile neoficiale i use secven? Totu ?i, comitetul pentru ial. standardizare a introdus cteva caracteristici noi, cum ar fi prototipul func ? iilor (mprumutat din C++) ?i un preprocesor mult mai capabil.

ANSI C este suportat de marea majoritate a compilatoarelor folosite astazi. Mare parte din codul C scris acum este bazat pe ANSI C. Orice program scris exclusiv n standardul C este garantat sa func? ioneze corect pe orice platforma cu o implementare C conform a. Totu?i, multe programe sunt scrise astfel nct aceste vor putea fi compilate numai pe anumite platforme, sau folosind un anumit compilator, eoarece (i) se folosesc biblioteci non-standard, de exemplu pentru interfa ? grafica, (ii) unele compilatoare ce nu a respecta standardul ANSI C, deci ?i urma ?ii lor n mod implicit sau (iii) bazarea pe dimensiunea unui anumit tip de date pe anumite platforme.

C99

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 9 of 12

Dupa procesul de standardizare ANSI, specifica? limbajului de programare C au ramas nemodificate iile pentru o perioada, n timp ce C++ a continuat sa evolueze. (Amendamentul Normativ I a creat o noua versiune a limbajului C n 1995, dar aceasta versiune este prea pu ? cunoscuta.) Totu?i, la sfr?itul in anilor 1990, standardul a suferit o revizie, conducnd la publicarea standardului ISO 9899:1999 n anul 1999. Acest standard este cunoscut sub numele C99. A fost adoptat ca standard ANSI n martie 2000. Noile aspecte ale limbajului C includ:
n n n

n n

n n

func? inline ii variablele pot fi declarate oriunde n cadrul unui program (la fel ca ?i n C++) cteva noi tipuri de date, incluznd ?i long long int (pentru a reduce efortul legat de tranzi? ia de la 32-bi ? la 64-bi? un tip explicit de date boolean ?i un tip complex de date reprezentnd i i), numerele complexe tablourile de dimensiuni variabile suport pentru comentariile pe o singura linie, marcate la nceput de //, ca ?i n BCPL sau C++ ?i care au fost suportate de multe compilatoare ca o extensie a limbajului C noi func? cum ar fi snprintf() ii, noi fi?iere header, cum ar fi stdint.h

n ceea ce prive?te interesul n adoptarea noului standard C99, daca GCC ?i alte compilatoare suporta noile caracteristici C99, compilatoarele celor de la Microsoft ?i Borland nu suporta C99 ?i cele doua companii nu par interesate n a oferi nici un fel de s ort.

Diferen? ntre C, C++ ?i Pascal e


Compara? cu limbajul Pascal ie
Sintaxa Pascal
Sintaxa C ?i C++ Explica?ii

begin

nceput bloc de instruc? iuni

end. / end

Sfr?it bloc de instruc? iuni


Instruc? iune condi? ionala: <cond> adevarata determina execu ? codului dupa if (<cond>) ia Repeta cat timp <cond> adevarat Valoarea variabilei a e diferita de valoarea variabilei b Bucla (ciclu) for: se va repeta pna la verificarea condi? iei de ie ?ire din ciclu (valoarea variabilei i egale cu cea a lui n) Atribuire: n loca? de memorie corespunzatoare ia variabilei i se copiaza valoarea din loca? lui a ia Incrementare

if (<cond>) then

if(<cond>)

while(<cond>) do

while(<cond>)

a<> b

a!=b

for i:=1 to n do

for(i=1;i<=n;i++)

i:=a;

i=a;

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 10 of 12

i:=i+1

i++;

i:=i-1

i--;

Decrementare
Declarare variabila (n C++ ?i C99 se poate declara oriunde n program/func? ie)

var i: integer

int i;

if(a=b) then

if(a==b)

Daca a egal cu b
Citire de la intrarea standard (de obicei tastatur a) Scriere la ie?irea standard (de obicei ecran) Tip are?te o linie noua

read(var);

scanf("%s", &var);

write('text ', var); printf("text %s", var);

writeln;

printf("\n");

C ?i C++
Limbajul de programare C++ a fost ini? derivat din C. Totu?i, nu absolut orice program scris n C este ial valid C++. Deoarece C ?i C++ au evoluat independent, au ap arut, din nefericire, o serie de incompatibilita? ntre cele doua limbaje de programare [1]. Cea mai ampla revizie a limbajui C, C99, a i creat un numar suplimentar de conflicte. Diferen ? fac sa fie greu de scris programe ?i biblioteci care ele sa fie compilate ?i sa ruleze corect n calitate de cod C sau C++, ?i produce confuzii celor care programeaza n ambele limbaje. Diferen? fac ca fiecare din cele doua limbaje de programare sa ele mprumute din caracteristicile celuilalt limbaj de programare.
Bjarne Stroustrup, creatorul limbajului C++, a sugerat de nenum arate ori [2] sa se reduca incompatibilita? pe ct de mult posibil pentru a maximiza interoperabilitatea dintre cele dou a limbaje ile de programare. Unii au argumentat ca C ?i C++ sunt doua limbaje de programare distincte, compatibilitatea dintre ele fiind utila dar nu vitala; potrivit acestei opinii, eforturile de a reduce incompatibilitatea nu trebuie sa reduc a eforturile de a aduce elemente noi n mod independent celor dou a limbaje de programare. Cele mai importante diferen? sunt: e
n

inline func ? iile

inline apar n sec? iunea de declarare a variabilelor globale n C++, iar in C acestea apar n a?a zisele fi?iere statice. Cuvntul cheie bool are n C99 propriul sau header, <stdbool.h>. n variantele anterioare de C tipul de date boolean nu era definit, n schimb erau folosite o serie de metode (incompatibile) pentru a simula acest tip de date. Constantele caracter (cuprinse ntre apostrofuri) au dimensiunea unui int n C ?i char n C++. Cu alte cuvinte, n C, sizeof('a') == sizeof(int); n C++, sizeof('a') == sizeof(char). Chiar ?i n aceste condi? valoarea acestui tip de constante nu va dep a?i valoarea maxima ce ii, poata fi p astrata de char, deci o conversie de genul (char)'a' este sigur a. Cuvinte cheie suplimentare au fost introduse n C++, deci acestea nu pot fi folosite ca identificatori a?a cum ar putea fi folosite n C. (de exemplu, code>try, catch, template, new, delete, ...) n C++, compilatorul creeaza automat o eticheta pentru orice structura (struct), uniune

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia

Page 11 of 12

(union) sau enumera? (enum), astfel nct struct S {}; n C++ este echivalent cu typedef ie struct S {} S; n C.

C99 a adoptat unele func? ionalita? ce au ap arut ini ? n C++. Printre acestea se enumera: i ial
n n n

Declararea obligatorie a prototipului func? iilor Cuvntul cheie inline Eliminarea variabilei implicite int ca valoare de ntoarcere.

Exemplu
Un program care cite?te un numar ntreg ?i l afi?eaza. Pascal:

program test; var i:integer; begin writeln('introduceti un nr:'); read(i); end.


C:

#include <stdio.h> /* contine declaratiile functiilor de intrare/iesire */ int main() /* program principal */ { int i; printf("Introduceti un nr:"); scanf("%d",&i); /* citire numar introdus la tastatura */ printf("%d", i); /* afi?are numar citit */ return 0; }
C++:

#include <iostream> //contine declaratiile functiilor de intrare/iesire int main() //program principal { int i; std::cout<<"Introduceti un nr:"; std::cin>>i; //citire std::cout<<i; return 0; }

Vezi ?i

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

C (limbaj de programare) - Wikipedia


n n

Page 12 of 12

Limbajul C++ Compilator

Bibliografie
n

Doina Logofa tu: Bazele programarii in C. Aplica ?ii, Ed. 1, Editura Polirom, Ia ?i, 2006, ISBN 973-46-0219 -5.

Legaturi externe
n n n

C pe WikiBooks Romania en Limbajul C la Wikiversity en Programare n C la Wikibooks

Adus de la http://ro.wikipedia.org/wiki/C_(limbaj_de_programare) Categorie: Limbaje de programare


n n

Ultima modificare efectuata la 23:00, 12 septembrie 2011. Acest text este disponibil sub licen? Creative Commons cu atribuire ?i distribuire n condi ? a ii identice; pot exista ?i clauze suplimentare. Vede? detalii la Termenii de utilizare. i

http://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

9/18/2011

S-ar putea să vă placă și