帮小弟我看下这个简单的 程序,多谢了

帮我看下这个简单的 程序,谢谢了
#include   "stdafx.h "
#include   <iostream.h>
  main()
{
int   sum   =   0;int   i;
//   sum   values   from   1   up   to   10   inclusive
for   (int   val   =   1;   val   <=   10;   ++val)
    sum   +=   val;       //   equivalent   to   sum   =   sum   +   val


                                                            i=val;
                cout < <   "Sum   of   1   to   10   inclusive   is " < <i < <   endl;
return   0;
}    

我今天看书,书中关于作用域的问题
书上的原文是这样的
C++语言中,大多数作用域是用花括号来界定的。一般来说,名字从其声明点开始直到其声明所在的作用域结束处都是可见的
这个程序定义了三个名字,使用了两个标准库的名字。程序定义了一个名为main的函数,以及两个名为sum和val的变量。名字main定义在所有花括号之外,在整个程序都可见。定义在所有函数外部的名字具有全局作用域(global   scope),可以在程序中的任何地方访问。名字sum定义在main函数的作用域中,在整个main函数中都可以访问,但在main函数外则不能。变量sum有局部作用域(local   scope)。名字val更有意思,它定义在for语句的作用域中,只能在for语句中使用,而不能用在main函数的其他地方。它具有语句作用域(statement   scope)。
我自己理解的是val在for语句之外就是不能用的,可是我加了句i=val;,在vc中确可以输出i值为11,怎么和课本上的有点矛盾呀还是我理解错了!
往高手指教。再次谢谢了


------解决方案--------------------
这其实是作用域标准选择问题,函数体内变量的作用域目前有两种划分方法:一种是由括号界定,一种是由括号层界定。
标准的C++作用域选择的是前种,即变量只在括号内有效,这样的有BCB、GCC等
另一种,for/while/switch/if...定义的变量在其声明点所在层以下有效,这样当两个并列的指令存在时,前者声明的变量不仅会作用于其下的括号区域,而且还会延续到后者的使用空间,这样的编译器有VC、WC等。
本人倾向于使用BCB作为C/C++的学习、使用工具。
------解决方案--------------------
for (int val = 1; val <= 10; ++val)
这样Tc应该回报错吧?
Vc6里确实不行的,在Vc6里这样定义他不认成局部变量!应该是编译器问题
------解决方案--------------------
打补丁即可弥补VC6.0的对标准C++作用域的支持,在预编绎头文件中加入补丁代码
#define for if(0);else for
即可,不要担心效率,因为编译器自动会把没用的if(0);优化掉