Kernighan si Ritchie- Limbajul de programare C 0476, 280
pagini, 390.000 lei
Din Prefata autorilor la editia in limba engleza
Lumea calculatoarelor a suferit o revolutie de la publicarea cartii
"Limbajul de programare C", in 1978. Calculatoarele mari sunt acum
mult mai mari, iar calculatoarele personale au o putere care rivalizeaza cu cea
a calculatoarelor mainframe de acum zece ani. In decursul acestei perioade,
limbajul C s-a schimbat de asemenea, desi doar in mica masura, si s-a raspandit
cu mult dincolo de obiectivul sau initial de limbaj al sistemului de operare
UNIX.
Popularitatea crescanda a limbajului C, schimbarile survenite in limbaj de-a
lungul anilor si crearea de compilatoare de catre grupuri neimplicate in
proiectarea acestuia, s-au alaturat pentru a dovedi nevoia unei definitii mai
riguroase si mai moderne a limbajului decat cea pe care o oferea prima editie a
acestei carti. In 1983, Institutul National pentru Standarde din America (the
American National Standards Institute - ANSI) a infiintat o comisie care sa
creeze ²o definitie lipsita de ambiguitati si independenta de masina a
limbajului C ², mentinandu-i in acelasi timp stilul. Rezultatul este standardul
ANSI pentru C.
Standardul defineste riguros constructii la care se facuse referire, dar care
nu fusesera descrise in prima editie, in special atribuirea structurilor si
enumerarile. Se ofera o noua forma de declarare a functiilor, care permite
verificarea concordantei dintre definitie si apel. Se furnizeaza o biblioteca
standard, cu un set amplu de functii pentru intrare si iesire, gestionarea
memoriei, manipularea sirurilor de caractere si alte asemenea sarcini. Se
defineste riguros comportamentul unor elemente care nu fusesera explicate in
definitia originala si in acelasi timp se mentioneaza clar care parti ale
limbajului raman dependente de masina.
Aceasta a doua editie a cartii ²Limbajul de programare C² descrie limbajul C
asa cum este definit de standardul ANSI. Desi am punctat locurile unde limbajul
a evoluat, am ales sa scriem exclusiv in noua forma. In mare parte, aceasta nu
produce modificari semnificative; cea mai vizibila schimbare este noua forma de
declarare si definire a functiilor. Compilatoarele moderne ofera deja suport
pentru cele mai multe caracteristici ale standardului.
Am incercat sa pastram concizia primei editii. C nu este un limbaj vast si nu
este bine pus in valoare de o carte mare. Am imbunatatit expunerea aspectelor
critice precum pointerii, care sunt esentiali programarii in C. Am imbunatatit
exemplele originale si am adaugat exemple noi in mai multe capitole. De
exemplu, tratarea declaratiilor complicate este completata de programe care
exprima declaratiile in cuvinte si invers. Ca si inainte, toate exemplele au
fost testate direct din text, care este intr-un format direct interpretabil de
masina.
Anexa A, manualul documentar, nu este standardul, ci incercarea noastra de a
transmite esenta standardului intr-un spatiu mai mic. Este menit sa fie usor de
inteles pentru programatori, dar nu ca o definitie pentru cei care creeaza
compilatoare - acea sarcina apartine de drept insusi standardului. Anexa B este
un rezumat al facilitatilor oferite de biblioteca standard. Si aceasta anexa se
doreste o documentatie pentru programatori, nu pentru creatorii de unelte. Anexa
C este o trecere in revista a modificarilor fata de versiunea originala.
Asa cum am spus in prefata primei editii, limbajul C ²devine tot mai folositor
pe masura ce experienta in lucrul cu acesta creste². Dupa inca zece ani de
experienta, inca suntem de aceasta parere. Speram ca aceasta carte va va ajuta
sa invatati limbajul C si sa il folositi corect.
Brian W. Kernighan
Dennis M. Ritchie
Din Cuprins
CAPITOLUL 1. O introducere didactica
1.1 Initiere
1.2 Variabile si expresii aritmetice
1.3 Instructiunea for
1.4 Constante simbolice
1.5 Citirea si scrierea caracterelor
1.6 Tablouri
1.7 Functii
1.8 Argumente – apel prin valoare
1.9 Tablouri de caractere
1.10 Variabile externe si domenii de vizibilitate
CAPITOLUL 2. Tipuri, operatori si expresii
2.1 Nume de variabile
2.2 Tipuri si dimensiuni de date
2.3 Constante
2.4 Declaratii
2.5 Operatori aritmetici
2.6 Operatori relationali si logici
2.7 Conversii de tip
2.8 Operatori de incrementare si decrementare
2.9 Operatori pe biti
2.10 Operatori si expresii de atribuire
2.11 Expresii conditionale
2.12 Precedenta si ordine de evaluare
CAPITOLUL 3. Flux de executie
3.1 Instructiuni si blocuri
3.2 If-else
3.3 Else-if
3.4 Switch
3.5 Cicluri – while si for
3.6 Cicluri – do-while
3.7 Break si continue
3.8 Goto si etichete
capitolul 4. Functiile si structura programelor
4.1 Bazele functiilor
4.2 Functii ce returneaza altfel de valori decat intregi
4.3 Variabile externe
4.4 Reguli pentru domeniile de vizibilitate
4.5 Fisiere antet
4.6 Variabile statice
4.7 Variabile registru
4.8 Structura de bloc
4.9 Initializarea
4.10 Recursivitatea
4.11 Preprocesorul limbajului C
CAPITOLUL 5. Pointeri si tablouri
5.1 Pointerii si adresele
5.2 Pointerii si argumentele functiilor
5.3 Pointerii si tablourile
5.4 Aritmetica adreselor
5.5 Pointerii spre caractere si functiile
5.6 Tablouri de pointeri; pointeri la pointeri
5.7 Tablouri multidimensionale
5.8 Initializarea tablourilor de pointeri
5.9 Pointeri vs. tablouri multidimensionale
5.10 Argumentele liniei de comanda
5.11 Pointeri la functii
5.12 Declaratii complicate
CAPITOLUL 6. Structuri
6.1 Bazele structurilor
6.2 Structurile si functiile
6.3 Tablouri de structuri
6.4 Pointeri spre structuri
6.5 Structuri autoreferite
6.6 Cautarea in tabele
6.7 Typedef
6.8 Uniuni
6.9 Campuri de biti
CAPITOLUL 7. Intrari si iesiri
7.1 Intrari si iesiri standard
7.2 Iesire cu format – printf
7.3 Liste de argumente de lungime variabila
7.4 Intrare cu format – scanf
7.5 Accesul la fisiere
7.6 Tratarea erorilor – stderr si exit
7.7 Citirea si scrierea liniilor
7.8 Functii diverse
CAPITOLUL 8. Interfata sistemului UNIX
8.1 Descriptori de fisiere
8.2 I/O la nivel inferior – read si write
8.3 Open, creat, close, unlink
8.4 Acces aleator – lseek
8.5 Exemplu – o implementare pentru fopen si getc
8.6 Exemplu – listarea directoarelor
8.7 Exemplu – o rutina de alocare a spatiului de stocare
ANEXA A. Manual documentar
A1. Introducere
A2. Conventii lexicale
A3. Notatii sintactice
A4. Interpretarea identificatorilor
A5. Obiecte si valori l (lvalues)
A6. Conversii
A7. Expresii
A8. Declaratii
A9. Instructiuni
A10. Declaratii externe
A11. Domenii de vizibilitate si legare
A12. Preprocesarea
A13. Gramatica
ANEXA B. Biblioteca standard
B1. Intrari si iesiri: <stdio.h>
B2. Testarea clasei caracterelor: <ctype.h>
B3. Functii pentru lucrul cu sirurile de caractere: <string.h>
B4. Functii matematice: <math.h>
B5. Functii utilitare: <stdlib.h>
B6. Operatii de diagnosticare: <assert.h>
B7. Liste de argumente variabile: <stdarg.h>
B8. Salturi la alt nivel decat cel local: <setjmp.h>
B9. Semnale: <signal.h>
B10. Functii pentru data si ora: <time.h>
B11. Limite definite prin implementare: <limits.h> si <float.h>
ANEXA C. Rezumat al schimbarilor
Index