Limbajul c si C++ abc-doar



Yüklə 4,6 Mb.
səhifə1/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
  1   2   3   4   5   6   7   8   9   ...   55


**********************

* Limbajul C si C++ *

* ABC-doar *

* ********************


*********************************

* autor RUSU MIRCEA AUREL VALER *

*********************************

************************************

*MOTTO: *

* *

* Omul nu este supus masinii... *

* *

* ...si totusi... *

************************************


Limbajul C,si mai apoi urmasul sau C++,a fost gandit,comceput,

proiectat si apoi realizat prin structurare pe logica de procesor.

Acest program nu a fost creat pentru a face munca omului mai usoara,

ci pentru a face munca procesorului cat mai usoara.Pentru ca sa-l

intelegeti si sa-l iubiti,trebuie mai inatai sa invatati sa ganditi

ca o masina de calcul.Apoi,ve-ti realiza ca este usor,flexibil,rapid

si adaptabil,in permanenta schimbare...infinit.

C O N T I N U T

Generalitati . . . . . . . . . . . . . . . . . . . 1
Structura programelor . . . . . . . . . . . . . . 2
Biblioteca de functii standard (ANSI C) . . . . . 73
stdio.h (C++ 5.0 ) . . . . . . . . . . . 119

stdlib.h . . . . . . . . . . . . . . . . 135

stdlib.h (C++ 5.0 ) . . . . . . . . . . 170

stdarg.h . . . . . . . . . . . . . . . . 180

stddef.h . . . . . . . . . . . . . . . . 181

math.h . . . . . . . . . . . . . . . . . 182

graphics.h . . . . . . . . . . . . . . . 202

conio.h . . . . . . . . . . . . . . . . . 257

io.h . . . . . . . . . . . . . . . . . . 274

string.h . . . . . . . . . . . . . . . . 294

dos.h . . . . . . . . . . . . . . . . . . 312

process.h . . . . . . . . . . . . . . . . 359

ctype.h . . . . . . . . . . . . . . . . . 364

dir.h . . . . . . . . . . . . . . . . . . 373

alloc.h . . . . . . . . . . . . . . . . . 381

assert.h . . . . . . . . . . . . . . . . 384

bios.h . . . . . . . . . . . . . . . . . 385

errno.h . . . . . . . . . . . . . . . . . 391

float.h . . . . . . . . . . . . . . . . . 393

limits.h . . . . . . . . . . . . . . . . 397

mem.h . . . . . . . . . . . . . . . . . 397

setjmp.h . . . . . . . . . . . . . . . . 398

share.h . . . . . . . . . . . . . . . . . 400

signal.h . . . . . . . . . . . . . . . . 400

time.h . . . . . . . . . . . . . . . . . 403

values.h . . . . . . . . . . . . . . . . 409
Recomandari generale . . . . . . . . . . . . . 409
Anexe utile (functii grupate pe categorii) . . 411
Index alfabetic (functii si tipuri de date) . . 415

DATE GENERALE
Codul sursa utilizat pentru implementarea limbajului C nu este un

program in adevaratul sens al cuvantului ci o rutina interna de procesor

creata si apoi adaptata si readaptata in anii 1960-1970(Martin Richards,

Ken Thompson,Dennis Rithchie).Ca rezultat,sursa de cod C nu contine

functii de intrare/iesire a datelor,ci doar cuvinte cheie,utilizate doar

pentru ordonarea circulatiei fiecarui bit in interiorul procesorului.

Initial rutina de procesor(codul sursa) a fost utilizata doar experi-

mental,pentru realizarea de functii compatibile cu procesorul respectiv.

Pentru aplicarea limbajului,este necesar ca intrarea si iesirea datelor

in si din procesor sa fie reglementata,fie de catre un alt procesor(co-

procesor) fie de catre un set de functii I/O salvate si incarcate in me-

morie separat(o biblioteca de functii I/O).

Astfel,prima etapa in organizarea muncii pentru editarea unui program

in limbaj C si C++,consta din alegerea bibliotecilor de functii auxiliare

necesare.La prima vedere,pare o complicatie inutila,dar aceasta inovatie

a stat la baza vitezei de calcul,a flexibilitatii si a elegantei progra-

mului.Dupa cum este usor de intuit,procesorul nu este incarcat cu date

inutile ci doar strict cu functiile strict necesare pentru procesarea

aplicatiei dorite.Acest fapt are o semnificatie deosebita,mai ales atunci

cand se lucreaza la viteze foarte mari,cu volume mari de informatie.

In ansamblul sau,limbajul este format din cuvinte cheie(32 in C si 62

in C++),operatori(peste 40),modificatori(ai formatului pentru fiecare tip

de date) si functii auxiliare(545 de functii structurate in 30 de biblio-

teci in limbajul C).Prin combinarea acestor elemente se obtin circa un

milion de tipuri de formulare a expresiilor logice(linii de program),iar

prin includerea de constante si variabile in expresii se obtine un numar

practic infinit de variante posibile de limbaj exprimat corect(si impli-

cit un numar tot infinit de expresii incorecte).

Limbajul propriu zis nu este nici foarte complex,nici incomprehensi-

bil,dar nu este recomandat incepatorilor din doua motive:flexibilitatea

exprimarilor se preteaza la un numar extrem de mare de erori de conceptie

(expresiile sunt corecte,dar rezultatul este aberant) sau respectiv la

erori de sistem (codul sursa permite interventii la nivel de procesor,

care pot deregla sistemul de operare).

Pentru initiere in programare se recomanda programele de nivel inalt

cu functii explicite si comenzi secventiale(BASIC,FoxPro etc.).Este bine

ca utilizatorii limbajului C sa fie familiarizati cu modul de editare a

unei linii de program,structurarea de functii,rutine si subrutine,etc.

Daca sunteti incepator,si doriti totusi sa invatati acest limbaj,este

bine sa nu va lansati in operatii si comenzi al caror rezultat nu puteti

sa-l prevedeti.

Prin adaugarea de noi cuvinte cheie,sau de biblioteci de functii

auxiliare,programul este in continua dezvoltare si transformare.Dupa

prima standardizare ANSI(American National Standards Institute) din anul

1983,programul a primit noi valente si respectiv numele de C+ si apoi C++

(si salturile calitative probabil ca vor continua).

Limbajul C permite manevrarea bitilor,a octetilor si a adreselor de

memorie,este portabil pe aproape orice tip de calculator,este structurat

(sub forma de functii si biblioteci) si permite un numar mare de tipuri

si de formaturi pentru date(cinci tipuri de date).


-2- [asm-cdecl]

Nucleul de baza al limbajului C este format din urmatoarele cuvinte

cheie:asm,break,case,cdecl,char,const,continue,default,do,double,else,

enum,extern,far,float,for,goto,huge,if,int,interrupt,long,near,pascal,

register,return,short,signed,sizeof,static,struct,switch,typedef,union,

unsigned,void,volatile,while (versiunea Turbo 1.0 Borland 1988)

CUVINTE CHEIE(semnificatia lor):

asm<; or newline>

-este o declaratie care permite plasarea de declaratii in limbaj de

asamblare,situate in mijlocul sursei de cod C.In acest caz,toate

simbolurile C vor fi inlocuite prin echivalentul lor din limbajul de

asamblare.Pentru utilizarea acestui cuvant cheie,este necesara compi-

larea cu TCC.

EXEMPLU: asm mov ax,_stklen
break ;

-este o declaratie care determina deplasarea controlului la expresia

imediat urmatoare celei care inchide o bucla de tip while,do,for sau

switch (determina iesirea din bucla).

EXEMPLU: switch( i )

{

case -1:

n++

break;

case 0

p++

break;

case 1:

z++

}

case

-este declaratia prin care se realizeaza ramificarea unei comenzi de

tip switch() pentru a permite selectarea uneia

dintre variante(vezi mai sus).

Bucla de executie continua pana la epuizarea variantelor,sau pana la

cuvantul cheie break.

EXEMPLU: switch (operand) {

case MULTIPLY: x*=y;break;

case DIVIDE: x/=y;break;

case ADD: x+=y;break;

case SUBTRACT: x-=y;break;

case INCREMENT:x++;break;

}
cdecl ; sau cdecl ;

-declara numele unei variabile sau al unei functii in stilul C (adica

cu respectarea stricta a literelor majuscule si minuscule).

In plus,declara si conventia de transfer a parametrului functiei(tot

in stil C),care se va aplica functiei initiale(Exemplu:ultimul para-

metru va fi impins in fata iar apoi se sterge stiva)

EXEMPLE: int cdecl FileCount;

far cdecl HisFunc(int x);


-3- [char-do]

char

-desemneaza tipul unei date ca fiind de tip caracter.O variabila de

tip caracter au o lungime de 8 biti(1 byte=1 octet) si pot fi influ-

entate de modificatorul signed(valoarea implicita),unsigned,(ascii7).

Cu modificatorul signed,valoarea lor este cuprinsa intre -128 si 127,

iar cu unsigned intre 0 si 255.(in versiunea Visual C++ 6.0 valoarea

implicita pentru char este unsigned)

Modificatorul ascii7(in C++) specifica faptul ca toate valorile de

tip caracter vor fi transferate in filele generate fara modificator.

EXEMPLE: midl /char signed filename.idl

midl /char unsigned filename.idl

midl /char ascii7 filename.idl

const [=];

-permite atribuirea unei valori initiale pentru o variabila,fara ca

aceasta sa mai poata fi schimbata in timpul executiei programului.

EXEMPLU: const my_age=29;

Orice incercare a schimba valoarea pentru variabila my_age va genera

o eroare de compilare.

sau (const*;)

-se utilizeaza pentru a desemna tipul variabilei unei functii.

EXEMPLU: REZULTAT GetName(wchar_t * const pszName);
continue;

-determina trecerea controlului la sfarsitul buclei curente de tip

while,do sau for,la expresia care determina conditia de reevaluare a

continuarii buclei(determina continuarea executiei buclei).

EXEMPLU: for (i=0;i<20;i++){

if(array[y]==0)

continue;

array[i]=1/array[i];

}

default

-este valoarea implicita (originala) a unei date

Se poate include intr-o bucla pentru a returna un mesaj standard in

caz ca nici una dintre variante nu este evaluata a fi corecta.

EXEMPLU: switch (operand){

case MULTIPLY: x*=y;break;

case DIVIDE: x/=y;break;

default: printf("eroare de calcul!\n");

}
do while ();

-determina executia comenzii din atat timp cat valoarea

din este diferita de zero.Valoarea expresiei va fi veri-

ficata dupa fiecare executie a comenzii din .

EXEMPLU: i=1;n=1

do {

n*=i;

i++;

} while (i<=factorial);

-4- [double-far]

double, long double

-se utilizeaza pentru date de tip numar real

Variabilele de tip double au o lungime de 8 bytes(octeti) si exprima

numere cuprinse intre 1.7 E-308 si 1.7 E+308 (pe 15 digits).

Variabilele de tip long double au o lungime de 10 bytes(octeti) si

exprima numere cuprinse intre 1.2 E-4932 si 1.2 E+4932 (pe 19 digits)

Pentru utilizarea tipurilor de date double si float,este necesara si

incarcarea bibliotecii de functii matematice(# include math.h).

Se observa faptul ca se poate opera cu numere extreme (absolut inedit

pentru programele comerciale curente).
else

este optiunea alternativa din functia conditionala if

EXEMPLU: if (x

z=x;

else

z=y

#else face parte dintr-o declaratie #if de tip preprocesor si se

utilizeaza pentru a selecta liniile de date din program care vor fi

compilate,fata de cele care vor fi ignorate (conditia de selectare)
enum []{[=],...};

-defineste un set de constante de tip int.

Optional,sirul de constante poate primi un nume de identificare

Constantelor li se poate atribui o valoare fixa cu ,sau in

absenta acesteia li se va atribui automat valoarea constantei prece-

dente din lista de constante.Daca este o singura constanta si

lipseste,se va atribui valoarea implicita,adica zero (0).

EXEMPLU: enum moduri{LASTMODE=-1,BW40=0,C40,BW80,C80,MONO=7};

in exemplul de mai sus,C40,BW80 si C80 primesc valoarea lui BW40 (0).
extern ; sau extern ;

-este un declarator utilizat atunci cand functia respectiva are si

legaturi externe(de exemplu functia a fost declarata in alt modul

de cod sursa,situat pe o alta fila).

Se poate aplica atat pentru obiecte cat si pentru functii,in urma-

toarele situatii: 1.functii declarate in interiorul unui bloc,

2.obiecte intr-un bloc 3.obiecte in afara blocului 4.functii

EXEMPLE: extern int_fmode;

extern void Factorial(int n);
far far
sau far


-este un modificator care declara pointerul sau functia respectiva ca

fiind formata din doua cuvinte situate la maxim 1 megabyte distanta

(cat de departe se afla pointerul sau functia).Se utilizeaza atunci

cand compilarea se face pe modele foarte mici,la care conteaza dimen-

siunea memoriei (sa nu uitam ca au existat HDD-uri de 1-10 Mb).

Nu se mai utilizeaza in cazul C++ si in cazul sistemului de operare

Windows,care gestioneaza singur toate adresele.

EXEMPLE: char far *s;

void * far * p;


-5- [float-int]

float

-se utilizeaza pentru date de tip numere reale

Variabilele de tip float au o lungime de doua cuvinte (4 octeti) si

exprima numere cuprinse intre 3.4 E-38 si 3.4 E+38 (pe 7 digiti).

Pentru utilizarea datelor numerice de tip float este necesara si

incarcarea bibliotecii de functii matematice (#include math.h).
for([];[];[])



-este o bucla de repetitie in care comanda din statement este executata

in mod repetat pana cand valaorea lui este 0.Inaintea primei

repetitii,se evalueaza valoarea lui .Dupa fiecare repetitie,se

evalueaza care incrementeaza counterul.Toate cele trei expresii

sunt optionale (pot lipsi din expresie).Daca este omis,sa va

considera valoarea sa implicita,adica 1.

Bucla se executa pana cand evaluarea expresiei returneaza false

(adica 0).

EXEMPLE: for (i=0;i<100;i++)

sum +=x[i];
sau for(i=0,t=string;i<40&&*t;i++,t++)

putch(*t);

putch('\n');
goto ;

-transfera controlul la locatia specificata prin identificator

EXEMPLU: goto Again;

goto Stop;
huge huge
;


-este un modificator similar cu far,dar segmentul sau este normalizat,

astfel incat compararea celor doua adrese sa fie cat mai exacta,iar

valoarea pointerelor huge poate fi incrementata fara ca segmentul sau

sa fie redus (prin impachetare).
if() if()

sau

else



-daca evaluarea expresiei este diferita de zero,se va executa comanda

din (in primul caz) iar daca evaluarea expresiei este zero

se va executa comanda din varianta optionala inclusa prin else (in

cel de al doilea caz)

EXEMPLU: if(count<50)

count++;

#if este comanda de preprocesare prin care se selecteaza liniile de

adresa din program care vor fi compliate(incarcate in procesor)
int

desemneaza datele de tip integer.Cu modificatorul signed(implicit) ia

valori cuprinse intre -32768 si 32767 iar cu unsigned intre 0 si 65535


-6- [int-return]

_int8 (C++)

ocupa un octet si poate lua valori intre -128 si 127

_int16 (C++)

ocupa doi octeti si poate lua valori intre -32768 si 32768

-int32 (C++)

ocupa 4 octeti,ia valori intre -2147483648 si 2147483647

-int64 (C++)

0cupa 8 octeti,ia valori intre -9223372036854775808 si

9223372036854775808
interrupt ;

defineste o functie ca si nivel de intrerupere.

Toti registri CPU(unitatea centrala de procesare) vor fi salvati,

iar functia va fi terminata cu instructiunea IRET.

La executarea unei astfel de intreruperi,variabilele de registru si

avertizarea Stack(de supraincarcare a stivei) trebuie sa fie OFF.
long

-este un modificator ce se poate aplica datelor de tip int si double

EXEMPLE: long x (sau long int x /* int este implicit*/)

long double x

unsigned long int x

long int se reprezinta pe 4 octeti pentru numere cuprinse intre

-2147483648 si 1147483647

long double se reprezinta pe 10 octeti cu valori cuprinse intre

1.2 E-4932 si 1.2 E+4932 (pe 19 digits)
near near
/ near ;


-declara pointerul cu o lungime de un cavant (pana la 64K)

Acest modificator se utilizeaza la compilarea blocurilor mari de

memorie,pentru a forta pointerul sa fie cat mai apropiat.

EXEMPLE: char near*s

int(near*ip)[10];
pascal ; sau pascal ;

-declara o variabila sau o functie folosind conventiile de nume in

stilul Pascal(de exemplu scrise cu majuscule).

in plus,declara conventiile de tip Pascal pentru transferul de date

EXEMPLE: int pascal FileCount

far pascal HisFunc(int x,char*s);

In C++ acest cuvant cheie nu mai functioneaza.
register

-este un declarator

Specifica faptul ca variabila va fi arhivata intr-un registru masina

(in CPU daca este posibil) pentru a optimiza accesul.

EXEMPLU: register int i;
return [];

-executa iesirea imediata din functia curenta spre rutina din care a

fost apelata,eventual returnand o valoare.


-7- [short-struc]

EXEMPLU: double sqr(double x)

{

return(x*x)

}
short

-este un modificator care determina lungimea datei la 2 octeti(16 bit)

si domeniul de valori intre -32768-32767.Se aplica pentru int.

EXEMPLE: short int x

signed short int y
signed

-este un modificator ce se poate aplica datelor de tip int,char.

Pentru caracterele char reprezinta valoarea implicita(lungime de

1 octet=8 biti si valori intre -128 si 127.

Se poate cupla cu ceilalti modificatori.

EXEMPLE: signed char text

signed short int x

signed long int y
sizeof sau sizeof()

-returneaza lungimea expresiei,exprimata in bytes(octeti),sau respectiv

lungimea unui tip de date.

Ca operator,are precedenta fata de: * & -- ++ - " !

EXEMPLE: memset(buff,sizeof(buff),0);

nitems=sizeof(table)/sizeof(table[0]);
static sau static ;

-functiile si variabilele au sens doar in domeniul de valori cu care au

fost citite la compilarea actuala a programului.In cazul in care sunt

citite de catre un program extern si sunt utilizate de catre o functie

locala(din programul respectiv),static determina ca valoarea initiala

sa fie salvata si mentinuta intre apelari succesive ale functiei sau

variabilei respective(functia sau variabila mentine valoarea initiala,

intre solicitari).

Yüklə 4,6 Mb.

Dostları ilə paylaş:
  1   2   3   4   5   6   7   8   9   ...   55




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin