for(int   i=0;   i <max;   ++i) 
一直这样写没啥毛病,似乎没有研究这个的必要吧?

解决方案 »

  1.   

    不知道
    倒是vc6.0中这样定义的i,作用域不止for循环内了
      

  2.   

    在严格支持C++标准的编译器中
    for(int   i=0;   i <max;   ++i) 
    for(int   i=0;   i <max;   ++i) // 正确在不完全支持标准的编译器中
    for(int   i=0;   i <max;   ++i) 
    for(int   i=0;   i <max;   ++i) // 错误:i重定义 例如VC6
      

  3.   

    问题并不是int i能不能在for语句中定义,而在于i的作用范围到底是循环体内还是循环体外,C++标准是循环体外,意思就是当你结束循环之后你还能继续使用变量i。VC6中i的作用域是循环体外,但是VC.NET之后i的默认作用范围是循环体内,如果在循环结束后继续使用i,将得到编译错误。但是这个可以在编译选项中改变,在选项中能设置i可以作用在for循环之外。参考 /Zc:forscope 编译选项
      

  4.   

    for(int       i=0;       i   <max;       ++i) 在vc6.0中是不允许的
    由于VC++封装严格,容易成为不合适的原因
    这句话我想就是说:增加坠余的成员变量吧!使得整个类显得很庞大,因为你要把循环体内的变量写成成员变量
      

  5.   

    int test()
    {
       for(int i=0; i < max; ++i);
       for(int i=0; i <max;  ++i);   //VC6中不能编译通过,VS2005可以正常编译通过.
    }
    因此不建议使用这种格式是合适的.
      

  6.   

    {
     for(int       i=0;       i   <max;       ++i)   
    }
    {
     for(int       i=0;       i   <max;       ++i)
    }
    这么修改一下看看行不
      

  7.   

    C++的语法是:
    for ( for-init-statement condition ; expression ) statement
    也就是支持声明,「因为int i = 0不是表达式,int i = 0;却是for-init-statement」声明变量的作用域仅限于循环体,condition以及最后一个expression。在C99出来以前「C99也是支持声明的」,for在C中的语法是:
    for ( expression-1 ; expression-2 ; expression-3 ) statement
    「C99中为for ( clause-1 ; expression-2 ; expression-3 ) statement」
    它前面的只是一个表达式,是不支持声明的。而vc6.0在C99出来以前就有了,所以如果你用vc6.0编译c的话是不支持声明的。用C++编译则是可以。
    你们公司估计是为了和老的C代码(C99以前)兼容,所以不让出现你的那种形式。
      

  8.   

    1) 理由1,如楼上各位所述,兼容性
    2) 理由2,有些时候我们在循环后还需要处理循环变量i的结束值
    总之一句话,写在for里面固然没错,但写在for外面更加没错
      

  9.   

    VC6这样定义i的作用域是调用for的函数范围内,VC2005的作用域是for语句内,这是编译器对标准的支持问题。