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