变量作用域有关问题

变量作用域问题sum 0for(int i 0 i ! 10 ++i) // i在之前没有声明过sum + icout i 这是合法

变量作用域问题
sum = 0;
for(int i = 0; i != 10; ++i) // i 在之前没有声明过
  sum += i;
cout << i ;


这是合法的吗?书上说不是,但Vc++6.0 编译没错,并可以运行。i的输出值为10;
求解释。。。。。

[解决办法]
在旧标准中:
for(int i = 0; i != 10; ++i) // i 在之前没有声明过
sum += i;
cout << i ;


i的作用域可以在i定义之后,即跳出循环仍可以使用i;
 
但新标准c99把这个作用域限定到for循环之内了。

而一些编译器,比如vc,由于为了兼容旧的c/c++程序,仍然把i的作用域认定在i的定义之后都可见,所以会出现重复定义的情况,当然一般的编译器都是选项开关,可以按旧标准编译,也可以按新标准.


[解决办法]
标准说的是i的作用域仅在for循环内,但在vc6中,i的作用域大于循环,在vs2010中就没问题,究其原因,vc6老了,许多标准都不支持
[解决办法]
额,Java里貌似也是这样