Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

Capitolul 5.6.Pointerii nu sunt de tip INT

In jos

Capitolul 5.6.Pointerii nu sunt de tip INT Empty Capitolul 5.6.Pointerii nu sunt de tip INT

Mesaj  zooky 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).
zooky
zooky
Moderator
Moderator

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

https://e-learning.forumgratuit.ro

Sus In jos

Sus

- Subiecte similare

 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum