Marius Bancila scrie:PS: ce imi place la alte limbaje ca C# e ca initializeaza implicit orice variabile cu valorile default pt. tipul respectiv, indiferent de setarile de build. Standardul C++ nu specifica nimic de genul acesta, din care cauza exista acest comportament diferit in VC++ in DEBUG si RELEASE, depinzand de seatarile de compilare.
La vremea cand au pus bazele limbajului C,
domnii Kernighan si Ritchie n-au gandit deloc rau cand au lasat posibilitatea programatorilor sa lase neinitializate variabilele (n-a indraznit sa-i contrazica nici Stroustrup si nici cei din comitetul de standardizare

).
Dupa cum isi amintesc multi programatori de C++ si probabil chiar si cativa programatori de C#, in C variabilele locale se declara la inceput de bloc.
De exemplu
- Cod: Selectaţi tot
{
int sum; /* usually, here sum is garbage on the stack */
/* some code here */
sum = a + b; /* sum takes a meaningful value */
/* some other code here */
printf("sum=%d", sum);
}
Daca in codul de mai sus compilatorul ar pune automat o valoare default, sa zicem 0, ar pune cel putin o instructine procesor care sa faca asta, logic fara rost, ducand la micsorarea performantei.
Din pacate, in practica programarii (mai binezis a "scrierii de cod"

) s-au facut tone de greseli de genul
- Cod: Selectaţi tot
{
int sum; /* usually, here sum is garbage on the stack */
/* some code here */
/* nothing like 'sum = ...' then sum is still garbage */
printf("sum=%d", sum); /*print garbage*/
}
Cu pointerii treaba-i si mai naspa. Folosind pointeri nenitializati, avand te miri ce valori arbitrare, putem fi multumiti daca rezulta un "access violation", altfel Dumnezeu cu mila ce se poate intampla.
// Cat despre limbajele inalte (C#, VB, etc): intradevar ajuta programatori cascati sa nu greseasca si nici sa-si oboseasca capusorul si manutele cu initializarea variabilelor.
// Dar eu unul, nici nu indraznesc sa ma gandesc cat amar de instructini masina baga-n spate pentru asta.
