Šta je novo?

Visual C++ .NET - oblast važenja promenjive WTF?

zeleni_zub

Super Operater
VIP član
Učlanjen(a)
10.01.2002
Poruke
1,952
Poena
650
Kod:
double i=50;
   
double *pd;
int *pi;

pd=&i;
   
for(int i=0;i<10;i++)
 {
   // Neki kod
 }

pi=&i;

Ja ne mogu da verujem šta je dozvoljeno u C++ .NET-u (ovo ne može u Visual C++ 6.0).

Znači ovaj kod gore napisan.
Deklariše se 'i' kao double. Uzme se adresa u 'pd'. Onda se u petlji ponovo deklariše 'i', ali kao int. Posle izlaska iz petlje 'i' je i dalje int. Uzme se adresa u 'pi'. Sada se adresa u 'pi' razlikuje od one u 'pd' (pi!=pd). Znači napravljena je nova promenljiva sa istim imenom (int i), a onoj staroj (double i) ne može više da se pristupi. Može preko *pd (normalno vrati 50), ali ne može preko indentifikatora 'i'.

edit: Zaboravio sam da napišem... ako se 'i' deklariše kao int na početku, onda ne pravi dve promenjive, samo mu dodeli novu vrednost, a adresa ostaje ista (recimo da je umesto double *pd - int *pi1; posle petlje će biti pi1==pi).


Da li neko ima neko logično objašnjenje zašto su dozvolili da se ponovo deklariše promenljiva sa istim imenom?
 
Poslednja izmena:
Niko ne radi u Visual C++ .NET ili niko nije primetio ovo?
 
Ne znam sta ti ovde nije jasno, int i nije deklarisan u novom bloku ili funkciji pa da bude nova lokalna promenljiva... ajde da je

Kod:
for ( ; ; )
{
    int i;
    ...
}

ali nije...
 
Nije mi jasno zašto su dozvolili da se promenjiva ponovo deklariše.

Kao što sam gore napisao, ovo nije dozvoljeno u Visual C++ 6.0 (i starijim verzijama) - kompajler prijavi grešku.
 
Evo, upravo sam probao i rezultati su sledeci: u Visual Studiju 6.0 prijavljuje gresku kao sto si rekao, medjutim u Borland C++Builderu 6.0 (C++ Console Application kao projekat) ne prijavljuje gresku na tom mestu, ali je prijavljuje u redu pi=&i;: "cannot convert 'double *' to 'int *'...
S obzirom da svako tera svoju politiku i uvodi standarde po svom nahodjenju, preporucujem ti da se ne uzbudjujes previse oko toga.
Poz.
 
Voodoo_NBGD je napisao(la):
S obzirom da svako tera svoju politiku i uvodi standarde po svom nahodjenju, preporucujem ti da se ne uzbudjujes previse oko toga.
Poz.

Ne uzbuđujem se ja uopšte... ,)
Samo sam mislio da mi neko objasni koja je svrha toga.
 
Svrha je da nije samo dovoljno reci "znam C++", nego "znam Microsoft C++" ili "znam Borland C++" :D
Ti da programiras skolski i ne ubacujes deklaracije gde im mesto nije, ne bi ulazio u ovakve probleme :D ;)
 
Nazad
Vrh Dno