Capitolul 5.6.Pointerii nu sunt de tip INT

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 5.6.Pointerii nu sunt de tip INT

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

S-a putut observa ca programele C mai vechi au o atitudine mai toleranta fata de copierea pointerilor. In general a fost adevarat ca pe majoritatea masinilor un pointer poate fi asignat unui intreg si invers, fara a-l schimba; nu are loc nici o scalare sau conversie si nu se pierd biti. In mod regretabil aceasta stare de lucruri a condus la asumarea unor libertati nepermise desi partea programatorului in lucru cu rutina ce returneaza pointeri ce sint transmisi apoi pur si simplu altor rutine -necesitatea declararii pointerului fiind adesea omisa. De exemplu, sa luam o functie strsave care copiaza sirul s undeva, intr-o zona obtinuta printr-un apel la alloc, returnind apoi un pointer pe ea. Strsave se poate scrie astfel

char *strsave(s) /* salveaza undeva sirul s */
char *s;
{
char *p, *alloc();
if ((p = alloc(strlen(s) + 1)) != NULL)
strcpy(p, s);
return(p);
}

In practica, exista o tendinta puternica de a omite declararile:

strsave(s) /* salveaza undeva sirul s */
{
char *p;
if ((p = alloc(strlen(s) + 1)) != NULL)
strcpy(p, s);
return(p);
}

Acest cod s-ar putea sa mearga pe multe masini deoarece tipul implicit al functiilor si al argumentelor este int iar atit int-ul cit si pointerul pot fi asignati la inceput cit si la sfirsit. Cu toate acestea, acest gen de cod este inerent riscant deoarece el depinde de detalii de implementare si de arhitectura masinii, care nu pot fi rezolvate pentru compilatorul particular utilizat de dvs. Este recomandabil sa se efectueze toate declararile necesare. (Programul lint va avertiza in legatura cu astfel de restrictii in cazul in care se vor strecura inadvertente).
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