| Thread overview |
|---|
March 09, 2005 Why is a variable allowed to be declared twice? | ||||
|---|---|---|---|---|
| ||||
As in,
import std.stdio;
void main()
{
int i;
for (int i=0;i<2;i++)
writefln(i);
}
Should not have the compiler complained about it being declared twice?
I missed this one and it caused me. :-)
thanks,
josé
| ||||
March 09, 2005 Re: Why is a variable allowed to be declared twice? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to jicman | jicman wrote:
> As in,
>
> import std.stdio;
> void main()
> {
> int i;
> for (int i=0;i<2;i++)
> writefln(i);
> }
>
> Should not have the compiler complained about it being declared twice?
>
> I missed this one and it caused me. :-)
>
> thanks,
>
> josé
>
>
No, the int i inside the for loop has a different scope. This is the same as C++, and infact g++ doesn't even warn about i being hiding with -Wall on.
On a standards compilant C++ compiler (which MSVC by default is not) this will break
<code>
for (int i=0; i < 10; i++)
;
printf("%i\n", i); // should be an error because i is no longer in scope.
</code>
D has the same scoping rules for "for" loops.
Brad
| |||
March 09, 2005 Re: Why is a variable allowed to be declared twice? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to brad | Most/all decent C++ compilers warn about this ... <brad@domain.invalid> wrote in message news:d0lrc9$12oo$1@digitaldaemon.com... > jicman wrote: >> As in, >> >> import std.stdio; >> void main() >> { >> int i; >> for (int i=0;i<2;i++) >> writefln(i); >> } >> >> Should not have the compiler complained about it being declared twice? >> >> I missed this one and it caused me. :-) >> >> thanks, >> >> josé >> >> > No, the int i inside the for loop has a different scope. This is the > same as C++, and infact g++ doesn't even warn about i being hiding > with -Wall on. > On a standards compilant C++ compiler (which MSVC by default is not) > this will break > <code> > for (int i=0; i < 10; i++) > ; > printf("%i\n", i); // should be an error because i is no longer in > scope. > </code> > > D has the same scoping rules for "for" loops. > > Brad | |||
March 09, 2005 Re: Why is a variable allowed to be declared twice? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to brad | On Wed, 09 Mar 2005 16:43:34 +1300, brad wrote: but this looks like it shouldn't be valid (http://www.digitalmars.com/d/statement.html#block): import std.stdio; void main(char[][] args) { int i = 25; { int args; } { int i = 15; writefln("in ",i); } for (int i=0; i<2; i++) { writefln("for ",i); for (int i=425; i<427; i++) { writefln("\tfor ",i); } } writefln("out ",i); } #outputs# in 15 for 0 for 425 for 426 for 1 for 425 for 426 out 25 ## Ant | |||
March 09, 2005 Re: Why is a variable allowed to be declared twice? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ant |
yeah, well, I was right... :-)
Ant says...
>
>On Wed, 09 Mar 2005 16:43:34 +1300, brad wrote:
>
>but this looks like it shouldn't be valid
>(http://www.digitalmars.com/d/statement.html#block):
>
>import std.stdio;
>void main(char[][] args)
>{
> int i = 25;
> {
> int args;
> }
> {
> int i = 15;
> writefln("in ",i);
> }
> for (int i=0; i<2; i++)
> {
> writefln("for ",i);
> for (int i=425; i<427; i++)
> {
> writefln("\tfor ",i);
> }
> }
> writefln("out ",i);
>}
>
>
>#outputs#
>in 15
>for 0
> for 425
> for 426
>for 1
> for 425
> for 426
>out 25
>##
>
>Ant
>
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply