January 23, 2012
23.01.2012 20:06, bearophile пишет:
> Ellery Newcomer:
>
>> void main(){
>>           for ({int x=0; short y=0;} x<  10; x++, y++){
>>           }
>> }
> I don't understand, is that a compiler bug?
> Aren't x and y in a sub-scope that ends before you use x and y?
>
> Bye,
> bearophile
>
According to specs, this is BlockStatement that doesn't create scope, if I don't miss anything.
January 23, 2012
On 01/23/2012 07:06 PM, bearophile wrote:
> Ellery Newcomer:
>
>> void main(){
>>           for ({int x=0; short y=0;} x<  10; x++, y++){
>>           }
>> }
>
> I don't understand, is that a compiler bug?
> Aren't x and y in a sub-scope that ends before you use x and y?
>
> Bye,
> bearophile

It is not a bug.

ForStatement:
    for (Initialize Testopt ; Incrementopt) ScopeStatement
Initialize:
    ;
    NoScopeNonEmptyStatement

Initialize is NoScope.
January 23, 2012
On Monday, January 23, 2012 19:48:02 Timon Gehr wrote:
> On 01/23/2012 07:06 PM, bearophile wrote:
> > Ellery Newcomer:
> >> void main(){
> >> 
> >> for ({int x=0; short y=0;} x< 10; x++, y++){
> >> }
> >> 
> >> }
> > 
> > I don't understand, is that a compiler bug?
> > Aren't x and y in a sub-scope that ends before you use x and y?
> > 
> > Bye,
> > bearophile
> 
> It is not a bug.
> 
> ForStatement:
> for (Initialize Testopt ; Incrementopt) ScopeStatement
> Initialize:
> ;
> NoScopeNonEmptyStatement
> 
> Initialize is NoScope.

That's a pretty cool feature actually, since it gives you much more flexibility with regards to the types of the variables that you declare in the beginning of the for loop (or other things that you might want to do to the variables prior to running the loop. My only concern with it would be programmers not understanding it, because they're not used to it. I may start using.

- Jonathan M Davis
1 2
Next ›   Last »