Sunteți pe pagina 1din 7

 

Elementele de baza ale limbajului C 

Inainte de prezentarea sintaxei si structurii limbajului C, apar in continuare, pe scurt, istoricul si


caracteristicile limbajului C.

C este un limbaj de baza pentru programatorii profesionisti. Are caracteristicile limbajelor de


nivel inalt ( de exemplu PASCAL ), fiind insa mult mai flexibil, aspect care poate fi exploatat de
programatorii experimentati ( uneori programele in C pot parea de nedescifrat – ca cel de mai
jos).   

Iata un contraexemplu de program C, corect insa - incercati sa-l descifrati, apoi rulati-l!
Oricum, nimeni ( sau aproape ) nu scrie astfel de programe C.

/* is a mistery for you? */


#include <stdio.h>
main(t,_,a)
char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main
( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d
%d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%
+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K
w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n
';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;
[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}
{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a
== '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-
61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m
.vpbks,fxntdCeghiry"),a+1);}

Istoricul limbajului C
 proiectat si implementat de Dennis Ritchie in 1972 la AT&T Bell Laboratories, pentru programe
de sistem ( care pana atunci erau dezvoltate doar in limbaje de asamblare ); C-ul este un
succesor al limbajului B, creat de Ben Thompson
 in 1973, sistemul de operare UNIX este in totalitate scris in C
Caracteristicile
limbajului 

Caracteristicile limbajului C, care i-au determinat popularitatea, sunt prezentate pe scurt mai jos si vor fi
analizate pe parcursul cursului:

 limbaj de nivel mediu, portabil, structurat, flexibil


 produce programe eficiente ( lungimea codului scazuta, viteza de executie mare )

 de dimensiune relativ scazuta

 set bogat de operatori

 multiple facilitati de reprezentare si prelucrare a datelor

 utilizare extensiva a apelurilor de functii si a pointerilor

 verificare mai scazuta a tipurilor -- loose typing -- spre deosebire de PASCAL

 permite programarea la nivel scazut -- low-level , apropiat de hardware

Este utilizat in multiple aplicatii, in care nu predomina caracterul numeric:


 programe de sistem
 proiectare asistata de calculator

 grafica

 prelucrare de imagini

 aplicatii de inteligenta artificiala.

Alfabetul limbajului C 

Un program C cuprinde

 atomi lexicali ( identificatori, constante -- numerice, caracter, sir, operatori, semne de punctuatie )
si
 separatori ( spatii, comentarii, terminator de linie )

aranjati conform sintaxei limbajului.

Atomii si separatorii se construiesc din simbolurile care constituie alfabetul limbajului C. Simbolurile se
codifica conform codului ASCII ( American Standard Code for Information Interchange ), prin cate o
configuratie de 8 biti ( un octet ); rezulta faptul ca sunt 256 ( 0 - 255 ) de caractere in codul ASCII.

Alfabetul cuprinde simboluri grafice si simboluri fara corespondent grafic:

Simboluri grafice
 

Categorie  Membri  Cod ASCII


in zecimal       in hexazecimal     in
octal
A -- 65 41 101
A B C  .....     Z Z -- 90 5A 132
Litere
a b c   ......    z a --  97 61 141
z -- 122 7A 172
0 -- 48 30 060
Cifre 0 1 2   ......    9  9 -- 57 39 070
Liniuta de
subliniere
_   95 5F 137

Operatori si semne  ! " # % & ' ( ) * + ,


-./
 
:;<=>?[]\^{}|
de punctuatie  ~

Simboluri fara corespondent grafic


 

Secventa  Cod ASCII


Simbol Semnificatie
escape in zecimal
SP avans cursor cu o pozitie - space   32
BEL semnal acustic - bell \a 7
BS revenire cursor cu o pozitie - back space \b 8
FF salt la pagina noua - form feed \f 12
NL avans cursor cu o linie - new line \n 10
revenire cursor la inceputul liniei curente-
CR \r 13
carriage return
salt la urm pozitie de tabulare orizontala -
HT \t 9
horizontal tab
salt la urm pozitie de tabulare verticala -
VT \v 11
vertical tab
NULL caracter cu cod 0 ( terminator de sir ) \0 0

In codificarea ASCII:

 spatiul are codul mai mic decat simbolurile grafice ( 32 )


 cifrele ( in ordine crescatoare ), literele mari si literele mici ( in ordine alfabetica ) ocupa
cate trei zone compacte.

Atomii lexicali 

Folosind simbolurile grafice se construiesc atomii lexicali:

 identificatori
 constante ( explicite ) -- numerice, caracter, sir
 operatori

 semne de punctuatie.

Atomii sunt separati de separatori: spatiul, caracterul de tabulare orizontala HT, terminatorul de linie NL si
comentariul ( orice text aflat intre combinatiile de caractere /* si */ , sau textul inceput cu // pana la
sfarsitul liniei ).

Numele sau identificatorii se compun dintr-o secventa de litere, cifre si/sau _ ( liniuta de subliniere ),
primul caracter trebuind sa fie litera sau _. Numele sunt case sensitive, deci se face deosebire intre
literele mari si mici ( spre deosebire de PASCAL ). Pot fi:

 nume utilizator - nume de variabile, constante simbolice, functii, tipuri, structuri, uniuni - este bine
sa fie alese cat mai sugestiv pentru scopul utilizarii; se obisnuieste ca numele constantelor
simbolice sa fie compuse din majuscule -- o constanta simbolica se defineste prin directiva
#define fiind recunoscuta in toate liniile de program ce urmeaza definirii; preprocesorul, anterior
compilarii, inlocuieste orice aparitie a unei constante simbolice cu definitia sa
 cuvinte cheie ale limbajului C - pot fi folosite doar cu intelesul cu care au fost definite

 cuvinte rezervate - intelesul poate fi modificat, de evitat acest lucru; pentru ca multe nume
rezervate de compilator, invizibile programatorului, incep cu _, este indicat a nu utiliza _ pentru
inceputul numelor utilizator.

Exemple de nume utilizator


 
suma  produs  x1  X1 PI functia_gauss

Exemple de definitii de constante simbolice ( care sunt nume utilizator ):

#define     PI            3.1415


#define     DIMENSIUNE    20
#define     Salut         "Hello!"

Tabela cuvintelor cheie - 32 cuvinte cheie, dintre care 27 provin din standardul initial Kernighan
- Ritchie, iar 5 au fost adaugate de comitetul ANSI ( enum, const, signed, void, volatile );
limbajele de nivel inalt au de obicei mult mai multe cuvinte cheie - BASIC peste 100
 

auto double int struct


break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
Tabela cuvintelor rezervate - proprii compilatorului Turbo C: nume de registri, moduri de
compilare
 

asm _cs _BH _DH


cdecl _ds _BL _DI
far _es _BP _DL
huge _ss _BX _DX
interrupt _AH _CH _FLAGS
near _AL _CL _SI
pascal _AX _CX _SP

Observatie: In mediul Turbo C, pentru a vizualiza o fereasta Help referitoare la un cuvant cheie, rezervat
sau nume de functie din biblioteca, se tasteaza Ctrl/F1 avand cursorul pe un caracter din cuvantul
respectiv.

Constantele numerice pot avea in componenta cifre si/sau caracterele . + - E e


Constantele nu au semn explicit: +12 sau -12 sunt expresii formate din cate o constanta precedata de
operatorii unari +, respectiv -. Ocupa un spatiu de memorie minim, corespunzator tipului numeric caruia ii
apartin - aspect care va fi lamurit la capitolul referitor la Tipuri fundamentale.
Constantele numerice pot fi:

 intregi - implicit in baza 10 ( zecimal ); in baza 8 ( octal ) sunt precedate de 0, in baza 16


( hexazecimal ) de 0x;   exemple: 1, 29, 123123123, 0237 ( in octal ), 0xffab ( in hexazecimal );
iata aceeasi constanta in trei scrieri echivalente, folosind cele trei baze: 255   0377    0xFF
 reale - pot avea doar mantisa sau mantisa si exponent ( exponentul este precedat de litera e sau
E si reprezinta puterea lui 10 ); ca exemplu o constanta in patru scrieri echivalente: 12.345    .
12345E+2    1.2345e1    12345e-3

Constantele caracter se precizeaza intre apostrofuri. O constanta caracter ocupa un spatiu de 2 octeti -
primul este 0, al doilea codul ASCII al caracterului. Caracterul poate fi:
 un simbol grafic sau codul sau ASCII in hexazecimal sau octal dupa \; exemple: 'A'   '\x41'   '\101' 
( sunt echivalente ); caracterele \    '    " se reprezinta ca si constante: '\\'   '\''   '"'
 un simbol fara echivalent grafic, dat ca secventa escape: '\n'   '\xa'   '\12'  ( sunt echivalente ).

Constantele sir se precizeaza intre ghilimele. Fiecare caracter din sir poate fi un simbol grafic, o
secventa escape sau un cod ASCII ( in octal sau hexazecimal ). Spatiul ocupat este un numar de octeti
cu unu mai mare decat al caracterelor din sir, ultimul octet fiind rezervat pentru terminatorul de sir:
caracterul cu codul ASCII 0, adica '\0'. Daca se doreste ca si caracterul " sa faca parte din sir, el trebuie
precedat de \.
Exemple: "CURS"   "\x43URS"  ( scrieri echivalente ale unui sir ce ocupa 5 octeti );
              "1a24\t"    "\x31\x61\x32\x34\11"   ( scrieri echivalente ale unui sir ce ocupa 6 octeti )
              "'\""  ( sir ce contine caracterele ' " si terminatorul, deci ocupa 3 octeti ).

Operatorii sunt formati din caracterele din tabela de simboluri grafice, ultima categorie. Vor face obiectul
unui capitol aparte in aceasta prezentare.

Ca semn de punctuatie, limbajul C foloseste simbolul ; care termina instructiunile, nu le separa ca in


PASCAL -- lucru care duce la scaderea erorilor de sintaxa.
Rulare sub Linux

Fiecare distribuitie Linux este insotita de gcc ( cc ), compilatorul de C - verificati daca acesta apare in /bin.

Daca fisierul sursa C, care apare ca intrare a compilatorului nu are erori, se obtine fisierul executabil
implicit a.out sau cel precizat dupa optiunea -o.

Sintaxa gcc:

gcc sursa.c

sau

gcc sursa.c -o executabil

De obicei un fisier sursa C se stocheaza intr-un fisier cu numele terminat cu .c.

Exemplu:

Un prim program C contine liniile de mai jos:

cat > prim.c

#include <stdio.h>

void main(){

  puts ( "Sa invatam C impreuna!" );

CTRL/D

Il compilam cu:

gcc prim.c -o prim

si il executam cu:

./prim

Va trebui ca pe ecran sa apara mesajul:

Sa invatam C impreuna!

Exercitii
1.Revedeti informatiile de la Constantele sir si scrieti cele doua constante care contin caracterele de mai
jos:

Informatii 100% corecte: 


I.Ionescu / 24 ani \ zis "a lu' Vasile" 

slash /; backslash \; procent%; 


ghilimele "; apostrof '. 

2.Care este spatiul de memorie ocupat de constanta caracter si cea sir: 'z' si "z"?

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