| |
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 - vezi programul mystery
).
Invatarea
limbajului C permite trecerea la limbajele orientate pe obiecte care il
au ca baza: C++ si Java. Nu toti guru din programare sunt de aceeasi
parere; de exemplu, cel mai cunoscut autor de carti de C/C++, Herbert
Schildt ( presedintele companiei Universal
Computing Laboratories, Illinois si membru al comitetului de standardizare
ANSI C++ ) spune ca pentru a stapani C++, trebuie sa inveti inainte C,
pe cand Bjarne Stroustrup,
creatorul limbajului C++, sugereaza ca este bine sa se studieze direct
C++.
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
-
cartea
de referinta care defineste un standard minim: Brian
W. Kernighan, Dennis Ritchie - "The
C Programming Language" - Prentice Hall 1978
-
a fost
dezvoltat un standard international ( intre 1983-1989 ) -- ANSI
C (ANSI - American National Standards Institute)
-
sunt dezvoltate
medii de programare C performante sub UNIX si DOS, care contribuie la utilizarea
masiva a limbajului.
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
|
| Litere |
A
B C ..... Z
a
b c ...... z
|
A
-- 65
Z
-- 90
a
-- 97
z
-- 122
|
41
5A
61
7A
|
101
132
141
172
|
|
| Cifre |
0
1 2 ...... 9
|
0
-- 48
9
-- 57
|
30
39
|
060
070
|
|
| Liniuta
de subliniere |
_
|
|
Operatori
si semne
de
punctuatie |
!
" # % & ' ( ) * + , - . /
:
; < = > ? [ ] \ ^ { } | ~ |
|
Simboluri
fara corespondent grafic
|
Simbol
|
Semnificatie
|
Secventa
escape
|
Cod
ASCII
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 |
| CR |
revenire
cursor la inceputul liniei curente-
carriage return |
\r |
13 |
| HT |
salt
la urm pozitie de tabulare orizontala -
horizontal tab |
\t |
9 |
| VT |
salt
la urm pozitie de tabulare verticala - vertical tab |
\v |
11 |
| 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"?
Copyright
© 2001-2002. Carmen Holotescu
All
rights reserved. Published by Timsoft
|