Capitolul 6.9. Typedef

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 6.9. Typedef

Mesaj  zooky la data de Mier Mar 18, 2009 1:57 pm

C admite o facilitate numita typedef pentru a crea nume pentru noi tipuri de date. De exemplu declaratia:

typedef int LENGTH;

face numele LENGTH sinonim pentru "int". Tipul LENGTH poate fi utilizat in declaratii exact la fel ca int:

LENGTH len, maxlen;
LENGTH *lengths[];

Similar, declaratia:

typedef char*STRING;

face ca STRING sa fie sinonim cu char* sau pointerul unui caracter, care poate fi utilizat in declaratii ca:

STRING p, lineptr[LINES], alloc();

Observati ca tipul fiind declarat printr-un typedef apare in pozitia unui nume de variabila. Sintactic, typedef este ca o clasa de memorie, extern, static, etc. In cazul de mai sus am utilizat litere pentru a accentua numele.

Ca de exemplu mai complicat putem folosi typedef pentru nodurile copacului prezentat mai inainte in acest capitol:

typedef struct tnode { /* the basic node */
char *word; /* points to the text */
int count; /* number of occurrences */
struct tnode *left; /* left child */
struct tnode *right; /* right child */
} TREENODE, *TREEPTR;

Aceasta creeaza doua noi tipuri de cuvinte cheie numite TREENODE (o structura) si TREEPTR (un pointer la structura), dupa care rutina "talloc" poate deveni:

TREEPTR talloc()
{
char *alloc();
return((TREEPTR) alloc(sizeofTREENODE)));

Trebuie sa specificam ca un typedef nu creaza noi tipuri; mai degraba renumeste tipurile existente. Variabilele astfel declarate au exact aceleasi proprietati ca si variabilele a caror declaratii sint explicite. In fond, typedef este ca un #define, exceptind ca, de cind este interpretat de copilator el face fata cu substitutiile in text care sint dincolo de capacitatile C macro procesorului. De exemplu:

typedef int (*PFI) ();

creaza tipul PFI, care poate fi utilizat intr-un context ca

PFI strcmpp, numcmp, swap;

din programul de sort din capitolul 5.

Exista doua motive mai importante pentru a utiliza declaratiile t9pedef. Primul este de a parametrizaun program alaturi de problemele de portabilitate. Daca pse utilizeza typedef pentru diferite tipuri de date care pot fi dependente de masina, numai typedef necesita modificari daca programul este mutat pe alta masina. O situatie obisnuita este de a folosi typedef pentru cantitati intregi variate, cind se alcatuieste un set adecvat de "short", "int" si "long" pentru fiecare masina.

Un al doilea scop a lui typedef este de a da mai mare claritate unui program numit TREEPTR este mai usor de inteles decit unul declarat ca un simplu pointer la o structura complicata.

In final, exista deja posibilitatea ca in viitor, compilatorul sau * un alt program ca "lint" sa faca uz de informatia continuta in typedef ca sa execute niste controale in plus asupra programului.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum