Documente Academic
Documente Profesional
Documente Cultură
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.
Cuprins
1 Scurt introducere n C
2 Un exemplu de program C ("Hello World!")
3 Tipuri de date
4 Alocarea memoriei
5 Sintaxa
6 Istoric
6.1 nceputurile limbajului de programare C
6.2 K&R C
6.3 ANSI C i ISO C
6.4 C99
7 Diferene ntre C, C++ i Pascal
Scurt introducere n C
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:
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]
#include <stdio.h>
main()
{
printf("Hello, World!\n");
}
#include <stdio.h>
int main(void)
{
printf("Hello, World!\n");
return 0;
}
#include <stdio.h>
fiier n una din locaiile date preprocesorului prin calea de cutare (englez
search 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 un ntreg. (void) indic faptul c funcia main nu primete nici un
argument la apelare.
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;
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("Hello world!\n");
return EXIT_SUCCESS;
}
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.
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:
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.
Sintaxa
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 */.
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
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 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.
ANSI C i ISO C
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.
Diferene ntre C, C++ i Pascal
Comparaie cu limbajul Pascal
Sintaxa Pascal
Sintaxa C i C++
begin
Explicaii
end. / end
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;
i++;
Incrementare
i:=i-1
i--;
Decrementare
var i: integer
int i;
if(a=b) then
if(a==b)
Dac a egal cu b
read(var);
scanf("%s", &var);
writeln;
printf("\n");
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.
Exemplu
Pascal:
program test;
var i:integer;
begin
writeln('introduceti un nr:');
read(i);
writeln(i);
end.
C:
/* 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++:
//program principal
{
int i;
std::cout<<"Introduceti un nr:";
std::cin>>i; //citire
std::cout<<i; //afiare
return 0;
}
Vezi i
Limbajul C++
Compilator
Bibliografie
Legturi externe
Programare in C
C pe WikiBooks Romania
en Limbajul C la Wikiversity
en Programare n C la Wikibooks
Categorie:
Limbaje de programare