Wouldn't the compiler be smart with this shadowing variable?

Siarhei Siamashka siarhei.siamashka at gmail.com
Fri Dec 10 21:55:17 UTC 2021


On Friday, 10 December 2021 at 13:35:37 UTC, Matheus wrote:
> Hi,
>
> Wouldn't the compiler be smart with this shadowing variable, 
> example:
>
> void main(){
>     int j;
>     for(int i=0,j=0;i<10;++i){}
>     return;
> }
>
> onlineapp.d(3): Error: variable `j` is shadowing variable 
> `onlineapp.main.j`
>
> So in the "for loop" shouldn't "i" be declared and "j" just be 
> assigned to 0?

Intuitively, there are two possible interpretations here for 
inexperienced humans (and you seem to be favoring the latter):
    1. declare a new "j" variable to be visible only inside of the 
loop.
    2. reuse the existing "j" variable.

But only one of them is a correct description of what actually 
happens when the compiler processes this code. So it's a good 
thing that the compiler is smart enough to reject ambiguous code 
and prevent humans from making mistakes.


More information about the Digitalmars-d-learn mailing list