Limbajul c si C++ abc-doar


#error -este comanda pentru generarea unor mesaje de eroare



Yüklə 4,6 Mb.
səhifə11/55
tarix07.05.2018
ölçüsü4,6 Mb.
#50260
1   ...   7   8   9   10   11   12   13   14   ...   55

#error -este comanda pentru generarea unor mesaje de eroare

Se utilizeaza pentru a detecta si semnala erorile survenite in etapa de

preprocesare.Sintaxa este: #error token-string(element-sir)

EXEMPLU: #if !defined(__cplusplus) //verifica o definitie

#error C++ compiler required //mesajul de eroare returnat

#endif

La intalnirea unui mesaj de eroare,procesul de compilare este incheiat.

#if,#elif,#else si #endif -controleaza compilarea expresiilor respec-

tive din fila sursa.Se utilizeaza pentru a selecta conditional,una sau

mai multe dintre expresiile controlate,in functie de un anumit parametru.

De exemplu,la un joc de platforma,incarca in memorie un anumit nivel al

jocului.Daca expresia ce urmeaza dupa #if este evaluata a fi diferita de

zero,atunci datele respective vor putea fi compilate,iar in caz contrar

vor fi excluse din procesul de compilare(eliminate din program).

Fiecare comanda inceputa cu #if trebuie sa se termine cu #endif.Pentru a

include mai multe conditii,se pot utiliza mai multe comenzi #elif,intre

#if si #endif sau o singura comanda #else.

Sintaxa generala este: #if constant-expression(constanta sau expresia)

#elif (constanta sau expresia)

... //oricate alte #elif

#else

#endif

EXEMPLU: #if DLEVEL==0 //prima conditie

#define STACK 0

#elif DLEVEL==1 //alta conditie optionala

#define STACK 100

#elif DLEVEL==2 //alta conditie optionala

#define STACK 200

#else //alternativa

#define STACK 300

#endif //iesirea din comanda

Fiecare comanda conditionala #if trebuie sa fie terminata prin #endif,in

caz contrar se va returna un mesaj de eroare(atentie mai ales atunci cand

utilizati un numar mare de comenzi si bucle intricate una in alta).

#ifdef si ifndef se utilizeaza la fel ca si #if,atunci cand identi-

ficatorul este predefinit si are semnificatia #if 1 daca identificatorul

a fost definit(cu #define) sau #if 0 daca identificatorul nu este definit

fost utilizat cu #undef.Comanda este aplicabila numai pentru identifica-

torii definiti cu #define,nu si pentru cei declarati in codul sursa C/C++.

Se utilizeaza pentru a identifica prezenta sau absenta identificatorilor

respectivi,declarati cu #define.


-71-

Comanda #ifndef actioneaza exact invers respectiv returmeaza 1 daca inden-

tificatorul nu a fost definit sau 0 daca a fost definit.

EXEMPLU: #ifdef test //verifica prezenta identificatorului test

#define rutina

#endif

#import(doar in C++)-se utilizeaza pentru a incorpora informatii din o

biblioteca tipizata.Continutul bibliotecii va fi convertit in clase C++

(obiecte C++).Sintaxa generala este:

#import [attributes]

este numele filei care contine informatiile si poate fi o

biblioteca tipizata(o fila .TLB sau .ODL),o fila executabila(.EXE),o bi-

blioteca de file legate dinamic(.DLL) sau de file de resurse(.OCX) sau un

document sau fisier continut intr-o biblioteca cu conditia sa fie in

format interpretabil de catre LoadTypeLib API.

Optional se poate include si directorul in care se gaseste biblioteca(ca-

lea de acces),dar trebuie sa contina numele unei file exis-

tente in biblioteca respectiva.

Daca numele filei este inclus intre paranteze ascutite() atunci

preprocesorul va cauta fila in directorul curent sau in cel specificat,

iar daca numele filei va fi inclus intre ghilimele("numele"),atunci pre-

procesorul va cauta initial in fila sursa,apoi in filele specificate prin

#include si abea apoi in directorul curent sau in cel specificat.

Atributele modifica biblioteca de date auxiliare adaugand sau eliminand

selectiv unele date.Argumentele accepate sunt:exclude,high method prefix,

high property prefix,implementation only,include(...),inject statement,

named guids,no auto exclude,no implementation,no namespace,raw disprinter-

faces,raw interfaces only,raw method prefix,raw native types,raw property

prefixes,rename,rename namespace.

EXEMPLU: #import "c:\path\type lib0.tlb"
#include-comanda procesorului sa trateze continutul filei respective

ca si cand ar fi fost incorporat in fila sursa a programului.Cu ajutorul

acestei comenzi,puteti grupa constante si functii in file separate pe

care le puteti utiliza ulterior in orice program(cu #include numele filei)

Sintaxa este: #include "calea-numele filei" sau #include

Calea de acces la fisier,respectiv numele directorului in care este cont-

tinuta fila este optionala.Daca se specifica intre ghilimele,procesorul va

cauta initial in directorul curent si apoi in calea de acces specificata,

iar daca se specifica intre paranteze ascutite(<>),procesorul va cauta

initial in calea specificata si apoi in calea inclusa in variabila INCLUDE

EXEMPLU: #include

Comenzile de tip #include pot fi intricate pana la maximum 10 nivele.

#line -este comanda prin care se schimba in registrul procesorului

numarul de linie si numele filei de la adresa respectiva,prin numarul de

linie si numele filei specificate in comanda.

EXEMPLU: #line 151 "copy.c" //"copy.c" va fi arhivat pe linia 151

#undef -este comanda prin care se sterge un identificator definit cu

#define(numele respectiv va fi nedefinit).Se poate aplica si pentru un

identificator ce nu a fost definit(pentru a va asigura ca este nedefinit).

EXEMPLU: #define WIDTH 80

#undef WIDTH


-72-

#pragma -sunt comenzi specifice pentru fiecare tip de procesor sau

de sistem de operare,prin care se precizeaza modul de control asupra arii-

lor de memorie si modul in care functiile primesc parametrii.Sunt diferite

de la un calculator la altul si de la un compilator la altul,dar toate

sunt astfel concepute incat sa fie compatibile cu C si cu C++.

# -este directiva nula (un semn # singular).Nu are nici un efect.
Gramatica preprocesorului este urmatoarea:

Conventiile de preprocesor privitoare la atributele fonturilor sunt urma-

toarele:

ATRIBUT DESCRIERE

nonterminal Indica tipul italic nonterminal

#include Tipul bold terminal se utilizeaza pentru cuvinte

cheie si trebuie respectat ca atare

opt Caractere neterminale intotdeauna optionale

default typeface Caracterele din setul descris ca typeface pot fi

utilizate ca terminale in expresii

: dupa caractere neterminale specifica inceputul

unei definitii.Definitiile alternative se trec

sub forma de lista pe linii diferite

Terminalele(caracterele terminale) sunt caracterele cu care se termina

sintaxa unei definitii.Caracterele neterminale sunt cele din interiorul

unei expresii(constante,identificator,cuvant cheie,operator,punctuator).

Preprocesorul recunoaste si expandeaza si o serie de macrodefinitii.

Macro-urile curente sunt:

__DATE__ -contine data curenta (Mmm dd yyyy)

__FILE__ -contine numele filei curente

__LINE__ -contine numarul liniei din fila sursa(un numar intreg zecimal)

__STDC__ -contine standardul ANSI C

__TIME__ -contine timpul inregistrat la ultima compilare (hh:mm:ss)

__TIMESTAMP__ -contine date si ora ultimei modificari a filei sursa

Compliatoarele Microsoft recunosc si urmatoarele macrouri:

_CHAR_UNSIGNED(default char is unsigned),__cplusplus(definitie C++ ),

_CPPRTTI(runtime type information),_CPPUNWIND(enable exception handling),

_DLL(multithread DLL),_M_ALPHA(1 doar pt.compilatorul ALPHA),_M_IX86(tipul

de procesor),_M_MPPC(tipul de procesor Macintosh),_M_MRX000(tipul MIPS),

_M_PPC(tipul PowerPC),_MFC_VER(versiunea MFC),_MSC_EXTENSIONS(este 1),

_MSC_VER(versiunea VisualC++),_MT(multithread DLL),_WIN32(aplicatii WIN32)
Cu ajutorul comenzilor de preprocesor,limbajul C isi extinde si mai

mult gama de optiuni,prin includerea functiilor din biblioteca standard

(peste 500) si a eventualelor functii definite de catre utilizator si

salvate in biblioteca.Puteti sa va formati o biblioteca proprie din

functiile preferate editate de d-voastra.In plus,versiunile C++ adauga si

biblioteca MFC pentru clasele de obiecte predefinite si bibliotecile de

tip Template,pentru obiectele predefinite parametrizate.

Toate aceste facilitati,permit o deosebita suplete in formularea

expresiilor si a functiilor,dar in acelasi timp se preteaza la nenumarate

erori de editare sau de conceptie a expresiilor.Este bine sa incepeti cu

expresii cat mai simple(ca si cele care urmeaza pentru exemplificarea

functiilor standard),abea apoi sa incercati formualari savante,complexe.


-73-

BIBLIOTECA DE FUNCTII STANDARD (ANSI C)
Textul urmator si exemplele se refera la versiunea Turbo C 2.0 care

insoteste manualul,dar majoritatea versiunilor de programe si compilatoare

in limbaj C vor recunoaste aceleasi functii.Este bine sa verificati totusi

utilitarul Help al programului de care dispuneti.

Pentru instalarea programului (Turbo C 2.0) copiati pe unitatea C,

intr-un director denumit USR,toate filele si fisierele programului.Apoi

lansati programul cu dublu click pe Tc.exe.Tastati Esc pentru iesire din

fereastra de dialog,apoi selectati meniul programului cu tasta F10.Folo-

siti sagetile dreapta-stanga si respectiv tasta Enter,pentru a vedea

toate meniurile si submeniurile programului.Eventual modificati din

optiuni(doar daca stiti exact ce anume doriti sa faceti).

In versiunile mai recente,o parte dintre functii au fost abandonate,

sau inlocuite cu altele mai performante.In cazul incompatibilitatii cu

versiunile recente,inlocuiti functia cu cea corespunzatoare din versiunea

d-voastra(verificati indexul din Help).

Biblioteca de functii este subimpartita in mai multe file,denumite

file de antet.Atunci cand editati un program,selectati cu atentie doar

acele file care contin functiile necesare pentru executarea aplicatiei.

Nu are rost sa incarcati memoria cu file care nu vor fi executate nicio-

data.Filele de antet sunt denumite "header" si sunt notate cu extensia

.h (de la header).Pentru incarcarea lor in memorie se utilizeaza comanda

de preprocesor #include .

Filele antet din Turbo C 2.0 sunt:alloc.h,assert.h,bios.h,conio.h,

ctype.h,dir.h,dos.h,errno.h,fcntl.h,float.h,graphics.h,io.h,limits.h,

math.h,mem.h,process.h,setjmp.h,share.h,signal.h,stdarg.h,stddef.h,stdio,h

stdlib.h,string.h,sys\stat.h,sys\timeb.h,sys\types.h,time.h,values.h.

Filele (fisierele) antet contin declaratia functiilor si a tipurilor

de date asociate lor.Filele nu vor fi prezentate in ordine alfabetica si

este probabil ca exemplele vor contine functii din toate filele(dupa nece-

sitati).Pentru intelegerea lor,consultati manualul la functia respectiva.

Manualul prezent nu este de fapt decat o traducere sumara a ghidului

de referinte anexat programului(utilitarul Help),la care se adauga un

numar de exemple simpliste,cat mai intuitive si comentariile autorului.

Deoarece toate exemplele prezentate vor necesita si functii de intrare

iesire,prima fila antet va fi stdio.h(standard input-output),care contine

functiile de baza pentru comunicarea om-masina.
BIBLIOTECA C -FILA ANTET stdio.h
Contine urmatoarele functii:clearerr,fclose,fcloseall,fdopen,feof,

ferror,fflush,fgetc,fgetchar,fgetpos,fgets,fileno,flushall,fopen,fprint,

fputc,fputchar,fputs,fread,freopen,fscanf,fseek,fsetpos,ftell,fwrite,getc,

getchar,gets,getw,perror,printf,putc,putchar,puts,putw,remowe,rename,

rewind,scanf,setbuf,setvbuf,sprintf,sscanf,_strerror,strerror.

Asadar fisierul contine 45 de functii destinate special pentru comuni-

carea utilizatorului cu calculatorul(introducerea de comenzi si mesaje de

la tastatura,afisarea pe ecran,imprimarea datelor,scrierea si preluarea

datelor din fisiere etc.).Aceste functii sunt indispensabile pentru apli-

catii(cu exceptia celor in care calculatorul lucreaza independent de om).


-74- [ stdio.h-printf() ]

FUNCTIA printf()

Este functia care permite afisarea datelor pe ecran,sau imprimarea lor.

Functia timite datele formatate spre stdout(standard output device),adica

spre dispozitivul curent de afisare a datelor.

SINTAXA GENERALA este: int printf(const char *format,...);

Prin format se poate preciza tipul de format dupa cum urmeaza:

d signed decimal int

i signed decimal int

o unsigned octal int

u unsigned decimal int

x unsigned hexadecimal int

X unsigned hexadecimal int

X hexadecimal long (pentru functia scanf)

f floating point [-]dddd.ddd

e floating point [-]d.ddd e[+/-]ddd

g floating point(tip e sau f in functie de precizie)

E la fel ca si e dar exponentul se noteaza cu E in loc de e

G la fel ca si g dar exponentul se noteaza cu E

c single character

% caracterul %

p pointer: near-YYYY;far-XXXX:YYYY

n numarul de caractere salvat la locatia din pointer

none aliniaza la dreapta

- aliniaza la stanga

blank afiseaza semnul pentru valorile negative

# conversteste la valorile alternative:

c,s,d,i,u nici un efect

o 0 asumat pentru argumentele nonzero

x sau X 0x sau 0X pentru argumente

e,E,f utilizeaza punctul decimal

g sau G ca mai sus dar fara zerouri

[width]

n cel putin n caractere

0n cel putin n caractere,cu 0 la stanga

* urmatorul argument din lista este width

[.prec]

none precizia implicita

.0 d,i,o,u,x precizia implicita

e,E,f fara punct decimal

.n la majoritatea dintre n caractere

* urmatorul argument din lista este precizia

[modificatori]

F argumentul este un pointer far (adresa indepartata)

N argumentul este un pointer near (adresa apropiata)

h d,i,o,u,x,X argumentul este short int

l d,i,o,u,x,X argumentul este long int

l e,E,f,g,G argumentul este double (pentru functia scanf)

L e,E,f,g,G argumentul este long double

Cele trei puncte specifica faptul ca functia poate avea un numar variabil

de argumente.Dupa executie,functia returneaza numarul de caractere afisate

iar in caz de eroare returneaza EOF(end of file).


-75- [stdio.h-printf]

Functii cu actiune asemanatoare sunt:ecvt,fprintf,putc,puts,scanf si

vprint.

Pentru exemplificarea functiei editati urmatorul exemplu:

#include

volatile int x;

volatile int y;

int main()

{

do {

printf("Love...don't come easy...");

for (y=0;y<90;y++)

printf(" ");

x++;

} while (x<500);

}

Pentru editarea unei aplicatii,lansati programul cu Tc.exe,selectati

meniul cu F10,alegeti File,tastati Enter,alegeti New si tastati Enter.

Dupa redactarea aplicatiei(ca mai sus),tastati F10 pentru a selecta me-

niul,alegeti Compile,selectati Compile to OBJ si apoi Enter.In cazul in

care exista cumva greseli de editare,corectati greselile pana cand com-

pilatorul returneaza mesajul: Succes-Press any key

Dupa compilarea programului,tastati din nou F10,selectati Run,alegeti

Run si apoi Enter pentru a executa programul.

Daca doriti sa salvati aplicatia,tastati F10,alegeti Save si apoi

introduceti numele dorit(si calea de acces) in fereastra de dialog+Enter.

In continuare puteti utiliza aplicatia,ori de cate ori doriti dupa

ce selectati din meniu File,alegeti Load,apoi in fereastra de dialog va

apare "Load File Name *.C",tastati Enter,apoi alegeti fila dorita din

fereastra de dialog si tastati Enter.

In exemplul de mai sus,textul continut in functia fprint este prelu-

crat de doua instructiuni conditionale.Pentru exercitiu si pentru a obser-

va diferite variante ale celor doua instructiuni,modificati valorile

pentru x si y in cele doua conditii (y<90 si x<500),de exemplu y<20 si

x<900.Experimentati mai multe metode de afisare a unui mesaj simplu.

Daca nu se specifica altfel,functia printf afiseaza toate datele,una

dupa alta,fara spatii libere.Pentru a scrie un text cu paragrafe,sau

pentru tabele sau orice alt fel de format se pot utiliza secventele de

scapare,care permit trecerea la un rand nou,spatii de tabulare,semne de

citat,scrierea de caractere ASCII etc.

In exemplul urmator,functia printf este utilizata pentru redactarea

unui tabel,utilizand secventele de scapare(prezentate anterior pg.48).

Pentru a stopa executia programului timp de 10 secunde,am adaugat in

program si functia sleep() din fila de antet dos.h,iar pentru a sterge

ecranul de eventualele caractere reziduale am adaugat si functia clrscr()

din fila de antet conio.h.In interiorul tabelului am introdus cateva

caractere specificate ca ASCII,pentru a exemplifica modul de selectare

a lor,atunci cand aveti nevoie de caractere speciale ($,%,@ etc.)

Dupa modelul prezentat,incercati sa realizati un tabel in care sa

afisati cateva date utile (nume,adrese,numere de telefon etc.).Nu va

descurajati la aparitia mesajelor de eroare.Corectati pana cand progra-

mul este editat corect.Compilati si apoi rulati programul.


-76- [stdio.h-printf]

EXEMPLU:

/* Exercitiu de editare tip text */

#include

#include

#include

void sleep();

void clrscr();

void main()

{

clrscr();

printf(" \n");

printf("\nTABEL DEMONSTRATIV\n");

printf(" \n");

printf("(text afisat pe linia urmatoare)\n");

printf("Titlul1\tTitul2\tTitlul3\tTitlul4\n");

printf("===============================================\n");

printf("\nCaractere ASCII:\n");

printf("\122\t\155\t\200\t\210\t\n");

printf("\164\t\180\t\150\t\144\t\n");

printf("\166\t\180\t\153\t\144\t\n");

printf("\77\t\81\t\95\t\101\t\n");

printf(" ");

sleep(10);

}

Pentru a modifica durata (in secunde) de afisare a datelor,puteti schimba

cifra din functia sleep().

Incercati sa redactati cateva texte,de exemplu poezia preferata,eti-

chete de produse sau reclame,anunturi,mesaje etc.

Nu uitati sa declarati functia main() care poate fi de tip void si nu

uitati sa declarati variabilele in afara functiei main().Nu uitati sa

adaugati punct si virgula dupa fiecare expresie.Incepeti cu un singur

rand si apoi adaugati restul textului.Daca nu utilizati o functie de

intarziere de tipul functiei sleep(),programul se va derula atat de repede

incat nu poate fi sesizat.Salvati toate aplicatiile redactate corect.Nu se

stie cand va vor fi utile.Nu salvati aplicatiile aberante sau defective.

In cazul in care filele antet nu pot fi accesate( mesaj de eroare),

verificati in meniul,la Options,optiunea Linker,daca accesul la biblioteci

este setat On(in caz contrar modificati setarea tastatand ENTER).

Pentru definirea si intelegerea functiilor de intrare-iesire,sunt

necesare notiunile de "stream"(flux-curent-impulsuri) si cea de memorie de

operare si respectiv de memorie suport.Memoria suport este cea in care se

Yüklə 4,6 Mb.

Dostları ilə paylaş:
1   ...   7   8   9   10   11   12   13   14   ...   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