Sunteți pe pagina 1din 14

Argument

C este prezentat uneori ca "asamblor portabil", fcndu-se astfel diferenele principale fa de limbajele de asamblare: codul unui program C poate fi compilat i rulat pe aproape orice tip de main (calculator), asemntor altor limbaje de programare, n timp ce limbajele de asamblare sunt specifice unui anumit model de main. Limbajul C aparine clasei limbajelor de nivel sczut sau de nivel mediu, aceasta indicnd strnsa legtur ntre interoperabilitate i echipamentul hardware. C a fost creat avnd drept scop important de a face ca programele mari s poat fi scrise mai uor i cu mai puine erori n paradigma programrii procedurale, dar fr a pune un obstacole n scrierea compilatorului de C, care este ncrcat de caracteristicile complexe ale limbajului. C are urmatoarele caracteristici importante: Este un limbaj de baz simplu, cu importante funcionaliti cum ar fi funciile matematice sau cele de manipulare ale fiierelor Este focalizat pe paradigma programrii procedurale, care faciliteaz programarea ntrun mod structurat Utilizeaz un set simplu de tipuri de date ce mpiedic multe operaii neintenionate Folosete un limbaj preprocesor, preprocesorul C, pentru sarcini cum ar fi definirea de macrouri i includerea mai multor fiiere surs referin Permite accesarea la nivel sczut a memoriei calculatorului prin utilizarea pointerilor Permite folosirea parametrilor, care sunt comunicai funciilor prin valoare i nu prin

Pointeri la funcii, ce permit forme rudimentare de nchidere (englez closure) i polimorfism Declararea variabilelor Structuri de date sau tipuri de date agregate, definite de utilizator prin (struct), ce

permit ca date nrudite s fie combinate i manipulate ca un ntreg[necesit citare] Printre caracteristicile ce lipsesc n C, dar care pot fi gsite n alte limbaje de programare se enumer: Un sistem automat de colectare a reziduurilor (de memorie) (englez Garbage collection) Clasele i obiectele (programarea orientat pe obiecte) Un sistem avansat de tipuri de date Programarea generic Suprancrcarea Metaprogramarea Suport nativ pentru programarea multifir (englez multithreaded) i funciile de reea Procesarea listelor

Dei lista minusurilor limbajului C este destul de lung, aceasta nu reprezint un dezavantaj suficient de mare pentru inhiba utilizarea limbajului C n practic, deoarece permite ca noi compilatoare s poat fi scrise pe noi tipuri de platforme i pentru c permite programatorului s in bine sub control programul pe care l scrie. Acesta este unul din motivele care face ca un cod scris n C s fie mult mai eficient dect dac ar fi scris n alte limbaje de programare. Numai un cod scris cu foarte mare grij ntr-un limbaj de asamblare poate fi mai performant, deoarece are control integral asupra mainii, dar performana avansat a compilatoarelor, combinat cu complexitatea noilor tipuri de procesoare, a fcut ca limbajul C s fie preferat i s fie acceptat din ce n ce mai mult de programatori. Una din consecinele acceptrii i eficienei C-ului este aceea c multe compilatoare, biblioteci i interpretoare ale limbajelor de nivel nalt sunt adesea implementate n C.

Etapele rezolvarii unei probleme cu ajutorul calculatorului Folosim calculatorul pentru a efectua calcule complexe. Daca calculele elementare pot fi efectuate cu ajutorul unui calculator de buzunar, rezolvarea unuor probleme nu se poate realiza decat de catre un calculator programabil. Dar pentru a obtine niste rezultate corecte, calculatorul trebuie sa cunoasca algoritmul de rezolvare. Algoritmul este transpus intr-un limbaj de programare, fiind codificat prin intermediul unui program. Programul este alcatuit din comenzi (instructiuni) pe care calculatorul le interpreteaza. Etapele obtinerii unui program. 1.Identificarea datelor de intrare si a celor de iesire Algoritmul foloseste date de intrare (ceea ce cunoastem )si in urma prelucarii obtine date de iesire(ceea ce vrem sa obtinem) OBSERVATIE Algoritmii opereaza cu date de intrare si de iesire, chiar si atunci cand acest fapt nu este atat de evident. Sa presupunem ca jucam un joc pe calculator. Acest joc este de fapt un program complex care a fost obtinut in urma codificarii unui algoritm. O data de intrare poate fi apasarea unei taste,un click al mouse-ului etc.O data de iesire poate fi o anumita imagine sau o succesiune de imagini care creeaza impresia ca un obiect se deplaseaza, un anumit sunet etc. Chiar si imaginile, sunetele etc sunt codificate numeric 2.Elaborarea algoritmului de rezolvare a problemei Rezolvarea matematica a unei probleme trebuie transpusa intr-un algoritm folosind instructiuni specifice.De obicei este mai greu sa gasim o rezolvare matematica decat sa realizam un algoritm.Algoritmul specifica operatiile pe care le are de facutcalculatorul pentru ca, pornind de la datele de intrare, sa obtina datele de iesire dorite. 3.Transpunerea algoritmului intr-un limbaj de programare Algoritmul poate fi codificat direct in limbajul de programare dorit, respectand sintaxa corespunzatoare. Sintaxa C++ Fiecare fiier surs conine declaraii de variabile i definiii de funcii. Funciile, la rndul lor, conin alte declaraii de variabile i comenzi. Declaraiile de variabile fie definesc noi tipuri sau atribuind un tip de date predefinite, prin scrierea tipului de dat i urmat de numele variabilei. Seciuni de cod sunt incluse ntre acolade { i }.

Comenzile execut aciuni cum ar fi cele de modificare ale valorii unei variabile sau afiarea unui text la consol. Structurile de control sunt variabile pentru execuii condiionale sau iteraii, realizate cu ajutorul cuvintelor rezervate if, else, switch, do, while i for. Cu ajutorul unei varieti de operatori implementai n C, se pot realiza operaii aritmetice, logice, comparative, pe bii, indexarea tablourilor i atribuiri. Comenzile pot de asemenea apela funcii. 4.Compilarea si testarea programului Programul trebuie verificat din punct de vedere al corectitudinii sintactice prin operatia de compilare.Testarea programului se realizeaza prin verificarea datelor de iesire inclusiv pentru cazuri particulare ale datelor de intrare. Daca sunt erori, atat datorita unei scrieri gresite sau unei erori de rationament, vor fi remediate in aceasta faza.

Program C
. Se citeste un vector cu n elemente numere natural cu elementele numerotate incepand de la 1.Sa se inlocuiasca fiecare element a[i] cu cea mai mare putere a lui i care este mai mica sau egala cu a[i] ,exceptind primul element al vectorului. Exemplu Pentru vectorul 23.24.43.90.80.rezulta vectorul 23.16.27.64.25 Programul afieaz vectorul laieirea standard, care este, de obicei, un terminal sau monitor. Poate s fie, totui, i un fiier sau alt dispozitiv hardware, depinznd de maparea ieirii standard n momentul execuiei programului. #include <stdio.h> void main() {float v[10],a;int n,i,poz; printf("Introduceti dimensiunea vectorului,n="); scanf("%d",&n); for(i=1;i<=n;i++)

mai sus va fi compilat corect de marea majoritate a compilatoarelor moderne. Totui, va produce unele mesaje de avertizare dac va fi compilat de un compilator ce respect standardul ANSI C. Mai mult, codul nu va fi compilat, returnnd mesaje de eroare, dac se respect standardele C99, deoarece variabila de ntors, de tip int, nu va putea fi dedus dac nu a fost specificat n codul surs. Aceste mesaje pot fi eliminate, aducnd cteva schimbri minore programului original:
#include <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } Urmeaz o discuie linie cu linie a programului prezentat mai sus: #include <stdio.h> Prima linie a programului reprezint o directiv preprocesor, #include. Aceasta face ca preprocesorul primul utilitar ce examineaz codul surs cnd acesta este compilat s substituiasc linia respectiv cu coninutul unui fiier sau al entitii la care se face referire. n acest caz, fiierul header ("antet") stdio.h care conine definiiile funciilor de manipulare a intrrii i ieirii standard va nlocui acea linie. Parantezele unghiulare ce cuprind stdio.h indic prezena acelui fiier n una din locaiile date preprocesorului prin calea de cutare (englezsearch path) a fiierelor header (aceste fiiere se afl n directorul "include" al platformei, respectiv compilatorului folosit). int main(void) Urmtoarea linie definete funcia numit main. Funcia main are un loc bine stabilit n programele C. Cnd un program C este executat, aceasta este prima funcie executat (punctul de intrare n program). Prezena acesteia este obligatorie pentru ca un program s poat fi executat. Poriunea de cod int indic faptul c valoare ntoars valoare pe care funcia main o va ntoarce procesului apelant este unntreg. (void) indic faptul c funcia main nu primete nici un argument la apelare. { Paranteza acolad deschis indic nceputul codului pentru funcia main. printf("Hello World\n"); Aceasta linie apeleaz caut i execut codul funcia printf, care a fost definit n fiierul header stdio.h. n cadrul acestui apel, funciei printf i este pasat (transmis) un singur argument, irul de caractere "Hello, World!\n". Secvena \n este denumit secven escape (cu semnificaie special), care se traduce prin caracterul EOL (end-of-line, sfritul liniei), pentru a muta cursorul pe linia urmtoare. Valoarea de ntoarcere a funciei printf este un ntreg int, dar nu este folosit n acest caz (este "ignorat"). return 0;

Aceast instruciune termin execuia codului funciei main i face ca aceasta s ntoarc valoarea 0 procesului apelant, n cazul acestasistemului de operare. } Paranteza acolad nchis indic terminarea codului funciei main. Compatibilitatea total cu alte compilatoare ce respect standardul C99 poate fi ins atins prin urmtorul cod: #include <stdio.h> #include <stdlib.h> int main(void) { printf("Hello world!\n"); return EXIT_SUCCESS; } Constanta EXIT_SUCCESS este definit n headerul stdlib.h, de aceea a fost necesar includerea sa. Pe majoritatea platformelor aceast constant are valoarea zero.

[modificare]Tipuri de date
C are un sistem de tipuri de date similar cu cel al descendenilor ALGOL, cum ar fi Pascal, dar totui cu anumite diferene. Cuprinde tipuri de date cum ar fi ntregi de diferite dimensiuni, cu sau fr semn, numere n virgul mobil, enumerri (enum), structuri de date (struct) i uniuni(union). C utilizeaz foarte mult pointerii, un tip de referin foarte simplu, care pstreaz adresa locaiei din memorie. Adresa poate fi manipulat cu ajutorul atribuirilor i a aritmeticii pointerilor. n momentul rulrii unui program, un pointer reprezint o adres de memorie. n momentul compilrii, un pointer este un tip de dat complex, ce reprezint att adresa de memorie ct i tipul de dat. Acest lucru permite expresiilor ce utilizeaz pointeri s fie evaluate dup tipul de dat. Pointerii au mai multe utilizri n C. De exemplu, irurile de caractere (englez text string) sunt adesea reprezentate printr-un pointer la un vector de caractere. Alocarea dinamic a memoriei este realizat tot cu ajutorul pointerilor. Un pointer null are o valoare rezervat, indicnd faptul c face referire la o locaie nevalid. Acest lucru este folositor n cazuri speciale cum ar fi pointerul next (urmtorul) n nodul final al unei liste nlnuite. Dereferenierea unui pointer null poate cauza un comportament imprevizibil al aplicaiei. De asemenea, exist i pointeri de tip void, fapt ce indic referirea la un obiect de tip necunoscut. Aceti pointeri sunt foarte folositori n programarea generic. Deoarece dimensiunea i tipul obiectelor la care acest tip de pointeri face referire sunt necunoscute, acetia nu pot fi derefereniai, dar pot fi convertii la alt tip de pointeri. n C, anterior standardului C99, tablourile (vectorii) sunt de dimensiune fix, static, cunoscut la momentul compilrii; n practic, acest lucru nu reprezint o piedic, avnd n vedere c se pot aloca blocuri de memorie n momentul rulrii, tratndu-le ca pe tablouri utiliznd librria standard. Spre deosebire de multe alte limbaje de programare, C reprezint tablourile ca i pe pointeri: o adres i un tip de dat. Prin urmare, valorile index pot depi dimensiunea actual a unui tablou.

De asemenea, C ofer posibilitatea de lucru cu tablouri multidimensionale. Din 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 sczut, unde poate fi necesar ca un ntreg s fie tratat ca o adres de memorie, un numr n virgul mobil ca un ntreg sau un tip de pointer ca un alt tip de pointer. Pentru astfel de cazuri C ofer operatorul de casting, care foreaz explicit conversia unei valori dintr-un tip de dat n alt tip de dat.

[modificare]Alocarea memoriei
Una din cele mai importante funcii ale unui limbaj de programare este ca acesta s furnizeze metode de management a memoriei i al obiectelor stocate n memorie. C furnizeaz trei metode distincte de alocare a memoriei pentru obiecte: Alocarea static a memoriei: adresele i dimensiunile obiectelor ce fac uz de alocarea static a memoriei sunt fixate n momentul compilrii i pot fi plasate ntr-o zon de dimensiune fix ce corespunde unei seciuni din cadrul fiierului linkedidat final. Acest tip de alocare a memoriei se numete static deoarece locaia i dimensiunea lor nu variaz pe durata de execuie a programului. Alocarea automat a memoriei: obiectele temporare (variabilele locale declarate n cadrul unui bloc de cod) sunt stocate n cadrul de stiv asociat funciei apelate, iar spaiul alocat este automat eiberat i reutilizat dup ce s-a prsit blocul n care acestea au fost declarate. Alocarea dinamic a memoriei: blocuri de memorie de orice dimensiune pot fi alocate ntr-o zon de memorie numit heap prin intermediul funciilor malloc(), calloc() i realloc(). Aceste blocuri de memorie pot fi reutilizate dup ce zona de memorie a fost eliberat prin apelul funciei free(). Nu toate variabilele sunt automat alocate. Urmtoarele tipuri de variabil sunt alocate static: toate variabilele globale, indiferent dac au fost sau nu declarate ca statice; variabilele locale declarate explicit ca fiind statice.

Variabilele alocate static au alocat locaia lor de memorie i iniializat nainte ca funcia main s fie executat i nu sunt dealocate pn cnd se termin execuia funciei main. Variabilele alocate static nu sunt reiniializate la fiecare apel al funciei n cadrul crora au fost declarate. O variabil alocat static are avantajul c i pstreaz valoarea, chiar dac funciile care acceseaz acea valoare nu mai sunt active. Acolo unde este posibil, alocarea automat sau static este preferat deoarece alocarea memoriei este coordonat de compilator, nemaifiind nevoie ca programatorul s aloce iar apoi s elibereze memoria operaie ce adesea genereaz erori. Totui, multe structuri de date sunt variabile n dimensini i deoarece alocarea automat i cea static trebuie s fie de dimensiune fix n momentul compilrii, sunt multe situaii n care alocarea dinamic trebuie folosit. Un exemplu ar fi tablourile de dimensiuni variabile.

[modificare]Sintaxa
Vezi i Sintaxa limbajului C

Spre deosebire de alte limbaje de programare cum ar fi Fortran 77, C-ul are o form liber, lsnd programatorul s-i organizeze codul folosind spaiile albe. Comentarii pot fi nserate oriunde n cadrul programului utiliznd delimitatorii /* i */. Fiecare fiier surs conine declaraii de variabile i definiii de funcii. Funciile, la rndul lor, conin alte declaraii de variabile i comenzi. Declaraiile de variabile fie definesc noi tipuri folosind cuvinte cheie precum struct, union i enum sau atribuind un tip de date predefinite, prin scrierea tipului de dat i urmat de numele variabilei. Cuvinte cheie precum char, int, precum i pointerul la unul din aceste tipuri *reprezint tipuri de date implementate nativ n C. Seciuni de cod sunt incluse ntre paranteze acolade ({ i }), pentru a indica pentru ce poriune a codului se aplic declaraiile de variabile i celelalte structuri de control. Comenzile execut aciuni cum ar fi cele de modificare ale valorii unei variabile sau afiarea unui text la consol. Structurile de control sunt variabile pentru execuii condiionale sau iteraii, realizate cu ajutorul cuvintelor rezervate if, else, switch, do, while i for. Salturi arbitrare sunt posibile prin folosirea cuvntului cheie goto. Cu ajutorul unei varieti de operatori implementai n C, se pot realiza operaii aritmetice, logice, comparative, pe bii, indexarea tablourilor i atribuiri. Comenzile pot de asemenea apela funcii, incluznd un numr mare de funcii din bibliotecile standard ale limbajului C, necesare pentru realizarea diferitelor sarcini cerute de programator.

[modificare]Istoric
[modificare]nceputurile limbajului de programare C
Etapa iniial de dezvoltare a limbajului de programare C a avut loc n cadrul laboratoarelor AT&T Bell ntre anii 1969 i 1973. Dup spusele lui Dennis Ritchie, cea mai creativ perioad a avut loc n 1972. A fost denumit C deoarece multe din caracteristicile sale au fost derivate din limbajul de programare B. Sunt multe legende despre originea limbajului C i legtura sa cu sistemul de operare Unix, cum ar fi: Dezvoltarea limbajului C a fost rezultatul dorinei programatorilor de a juca un joc de tipul Asteroids. Acetia l jucau pe calculatorul principal al companiei, dar din lipsa de resurse i datorit faptului c acesta trebuia s suporte mai mult de 100 de utilizatori, Thompson i Ritchie, nemulumii de controlul pe care l aveau asupra navei n ncercarea de a evita asteroizii, au decis s porteze jocul pe un PDP-7, nefolosit, din birou. Dar aceast main nu avea un sistem de operare, aa c au hotrt s scrie unul. Au decis ca eventual s porteze acest sistem de operare pe mainile PDP-11 pe care acetia le foloseau n birou, dar era o munc destul de dificil avnd n vedere c totul era scris n limbaj de asamblare. Aa c au decis s foloseasc un limbaj portabil de nivel nalt astfel nct sistemul de operare s poat fi portat cu uurin de pe un computer pe altul. Au ncercat folosind limbajul de programare B, dar i lipseau unele din funcionalitile care ar fi fcut facil folosirea unor caracteristici avansate a mainii PDP-11. Astfel, a aprut un nou limbaj de programare, numit C. Justificarea pentru obinerea primului computer care a fost utilizat pentru dezvoltarea sistemului de operare Unix a fost acela de a crea un sistem pentru a automatiza completarea autorizaiilor. Prima versiune a sistemului de operare Unix a fost scris 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 iniial n limbaj de asamblare pentru PDP 11/20, a fost rescris n C. Acesta a fost unul din primele kernele ale unui sistem de operare scris ntr-un limbaj de programare, altul dect limbajul de asamblare. ncercri anterioare au fost pentru scrierea sistemului Multics (scris n PL/I) i TRIPOS (scris n BCPL).

[modificare]K&R C
n 1978, Dennis Ritchie i Brian Kernighan au publicat prima ediie a crii Limbajul de programare C (eng. The C Programming Language). Aceast carte, cunoscut n cercul programatorilor sub numele K&R, a servit pentru muli ani ca un mijloc de informare asupra specificaiilor limbajului C. Versiunea limbajului C descris este cunoscut sub numele K&R C. K&R aduce n discuie urmtoarele caracteristici ale limbajului: Tipul de dat struct Tipul de dat long int Tipul de dat unsigned int

Operatorul =+ a fost schimbat n +=, precum i ceilali operatori nrudii (=+ producea confuzii analizorului lexical al compilatorului limbajului C; de exemplu: i += 10 comparat cu i = +10). K&R C este adesea considerat limbajul de baz pe care orice compilator C trebuie s-l suporte. Pentru muli ani, chiar i dup introducerea standardului ANSI C, a fost considerat ca fiind cel mai mic numitor comun pe care programatorii n C trebuie s-l respecte atunci cnd se vorbete de portabiliitate maxim, deoarece nu toate compilatoarele sunt scrise nc s suporte standardul ANSI C, iar o secven de cod scris n K&R C respect i ANSI C. n primele versiuni C, numai funciile care returnau o valoare non-integer trebuiau s fie definite sau declarate nainte de folosire. Despre o funcie folosit fr ca aceasta s fi fost declarat n prealabil se presupunea c ntoarce un ntreg. Parametrii funciilor nu erau verificai dup tip, totui unele compilatoare afiau un mesaj de atenionare dac o funcie era apelat cu un numr greit de argumente. n anii ce au urmat publicaiei K&C R, cteva caracteristici neoficiale au fost adugate limbajului C, fiind suportate de compilatoarele celor de la AT&T, precum i de ali productori. Acestea includ: funciile void i tipul de date void * funciile care ntorc tipul struct sau union numele cmpurilor unei structuri struct ntr-un spaiu de nume pentru fiecare

tip de structur atribuirea pentru tipurile de date de tip struct calificatorul const pentru a face un obiect de tip read only o bibliotec standard ncorpornd funcii implementate de diveri dezvoltatori

enumeraiile tipul float n precizie simpl.

[modificare]ANSI C i ISO C
La sfritul anilor 1970, C a nceput s nlocuiasc limbajul BASIC devenind cel mai utilizat limbaj de programare. n anii 1980 a fost adoptat i de calculatoarele IBM PC, popularitatea acestuia ncepnd s creasc semnificativ. n acest timp, Bjarne Stroustrup mpreun cu ali colegi de la Bell Labs au nceput s adauge limbajului C caracteristici ale programrii orientate pe obiecte. Limbajul rezultat a fost denumit C++ i este cel mai popular limbaj de programare pe sistemele de operare Microsoft Windows; totui C-ul rmne cel mai popular limbaj de programare n Unix. Alt limbaj de programare dezvoltat n acea vreme se numete Objective-C care adaug de asemenea C-ului caracteristici ale programrii orientate pe obiecte. Dei nu la fel de popular ca C++, ObejectiveC este folosit pentru dezvoltarea aplicaiilor pe ce folosesc interfaa Cocoa a sistemului de operare Mac OS X. n 1983, American National Standards Institute (ANSI) a format un comitet, X3J11, pentru a stabili specificaiile unui limbaj C standard. Dup un proces ndelungat, standardul a fost terminat n 1989 i ratificat ca ANSI X3.159-1989 "Programming Language C". Aceast versiune a limbajului ne este cunoscut sub numele ANSI C. n 1990, standardul ANSI C (cu mici modificri) 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 introduse secvenial. Totui, comitetul pentru standardizare a introdus cteva caracteristici noi, cum ar fi prototipul funciilor (mprumutat din C++) i un preprocesor mult mai capabil. ANSI C este suportat de marea majoritate a compilatoarelor folosite astzi. Mare parte din codul C scris acum este bazat pe ANSI C. Orice program scris exclusiv n standardul C este garantat s funcioneze corect pe orice platform cu o implementare C conform. Totui, multe programe sunt scrise astfel nct aceste vor putea fi compilate numai pe anumite platforme, sau folosind un anumit compilator, deoarece (i) se folosesc biblioteci non-standard, de exemplu pentru interfaa grafic, (ii) unele compilatoare ce nu respect standardul ANSI C, deci i urmaii lor n mod implicit sau (iii) bazarea pe dimensiunea unui anumit tip de date pe anumite platforme.

[modificare]C99
Dup procesul de standardizare ANSI, specificaiile limbajului de programare C au rmas nemodificate pentru o perioad, n timp ce C++ a continuat s evolueze. (Amendamentul Normativ I a creat o nou versiune a limbajului C n 1995, dar aceast versiune este prea puin cunoscut.) Totui, la sfritul 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: funcii inline 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 tranziia de la 32-bii la 64-bii), un tip explicit de date boolean i un tip complex de date reprezentnd numerele complexe tablourile de dimensiuni variabile suport pentru comentariile pe o singur 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 funcii, cum ar fi snprintf() noi fiiere header, cum ar fi stdint.h

n ceea ce privete interesul n adoptarea noului standard C99, dac GCC i alte compilatoare suport noile caracteristici C99, compilatoarele celor de la Microsoft i Borland nu suport C99 i cele dou companii nu par interesate n a oferi nici un fel de suport.

[modificare]Diferene ntre C, C++ i Pascal


[modificare]Comparaie cu limbajul Pascal
Sintaxa Pascal Sintaxa C i C++ Explicaii

begin

nceput bloc de instruciuni

end. / end

Sfrit bloc de instruciuni

if (<cond>) then

if(<cond>)

Instruciune condiional: <cond> adevarat determin execuia codului dup if (<cond>)

while(<cond>) do

while(<cond>)

Repet cat timp <cond> adevrat

a<> b

a!=b

Valoarea variabilei a e diferit de valoarea variabilei b Bucl (ciclu) for: se va repeta pn la verificarea condiiei de ieire din ciclu (valoarea variabilei i egale cu cea a lui n) Atribuire: n locaia de memorie corespunztoare variabilei i se copiaz valoarea din locaia lui a Incrementare

for i:=1 to n do

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

i:=a;

i=a;

i:=i+1

i++;

i:=i-1

i--;

Decrementare Declarare variabil (n C++ i C99 se poate declara oriunde n program/funcie) Dac a egal cu b

var i: integer

int i;

if(a=b) then

if(a==b)

read(var);

scanf("%s", &var); Citire de la intrarea standard (de obicei tastatur)

write('text ', var);

printf("text %s", var);

Scriere la ieirea standard (de obicei ecran)

writeln;

printf("\n");

Tiprete o linie nou

[modificare]C i C++
Limbajul de programare C++ a fost iniial derivat din C. Totui, nu absolut orice program scris n C este valid C++. Deoarece C i C++ au evoluat independent, au aprut, din nefericire, o serie de incompatibiliti ntre cele dou limbaje de programare [1]. Cea mai ampl revizie a limbajui C, C99, a creat un numr suplimentar de conflicte. Diferenele fac s fie greu de scris programe i biblioteci care s fie compilate i s ruleze corect n calitate de cod C sau C++, i produce confuzii celor care programeaz n ambele limbaje. Diferenele fac ca fiecare din cele dou limbaje de programare s mprumute din caracteristicile celuilalt limbaj de programare. Bjarne Stroustrup, creatorul limbajului C++, a sugerat de nenumrate ori [2] s se reduc incompatibilitile pe ct de mult posibil pentru a maximiza interoperabilitatea dintre cele dou limbaje de programare. Unii au argumentat c C i C++ sunt dou limbaje de programare distincte, compatibilitatea dintre ele fiind util dar nu vital; potrivit acestei opinii, eforturile de a reduce incompatibilitatea nu trebuie s reduc eforturile de a aduce elemente noi n mod independent celor dou limbaje de programare. Cele mai importante diferene sunt: inline funciile inline apar n seciunea de declarare a variabilelor globale n

C++, iar in C acestea apar n aa zisele fiiere statice. Cuvntul cheie bool are n C99 propriul su 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 condiii, valoarea acestui tip de

constante nu va depi valoarea maxim ce poat fi pstrat de char, deci o conversie de genul (char)'a' este sigur. Cuvinte cheie suplimentare au fost introduse n C++, deci acestea nu pot fi folosite ca identificatori aa cum ar putea fi folosite n C. (de exemplu, code>try, catch, template, new, delete, ...) n C++, compilatorul creeaz automat o etichet pentru orice structur (struct), uniune (union) sau enumeraie (enum), astfel nctstruct S {}; n C++ este echivalent cu typedef struct S {} S; n C. C99 a adoptat unele funcionaliti ce au aprut iniial n C++. Printre acestea se enumer: Declararea obligatorie a prototipului funciilor Cuvntul cheie inline Eliminarea variabilei implicite int ca valoare de ntoarcere.

[modificare]Exemplu
Un program care citete un numr ntreg i l afieaz. Pascal: program test; var i:integer; begin writeln('introduceti un nr:'); read(i); //citire numr introdus de la tastatur writeln(i); //afiare numr citit 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); /* afiare numr citit */ return 0; } C++: #include <iostream> //conine declaraiile funciilor de intrare/ieire int main() //program principal { int i; std::cout<<"Introduceti un nr:";

std::cin>>i; //citire std::cout<<i; //afiare return 0; }

[modificare]Vezi i
Limbajul C++ Compilator

[modificare]Bibliografie
Doina Logoftu: Bazele programarii in C. Aplicaii, Ed. 1, Editura Polirom, Iai, 2006, ISBN 973-46-0219-5.

[modificare]Legturi externe