none
VS2008 局部变量定义的问题 RRS feed

  • 问题

  • for(int i=0; i<MAX1;i++)

    {

        ......

    }

    for(i=0; i<MAX2;i++)

    {

        ......

    }

     

    以上的代码在VS2008编译时始终说下面一个for循环内的i未定义 而在VC++6.0中可以顺利编译通过 请问是什么原因

    2008年9月15日 7:30

答案

  •     在VS2008中VC++的编译器作了很大的改动以支持托管的C++,当然还有其他的一些改动。根据C++标准中的规定,你的代码中的错误编译器应该是报错的,但是VC++6的很多特性并不是和C++标准一致的,实际上VC++6的编译器帮你修改了你的这个错误。这是个历史遗留的问题了。实际上你使用很多开源的C++编译器都会报告这个错误。话题说的有些远了,但是我想你会对这段历史有兴趣的。
       作为一种好的编程习惯,即使编译器不报错,也不要这样写,这样会造成混乱和表意不清。
    2008年9月15日 14:45
    版主

全部回复

  • 你好!
       在第一个for循环结束的时候局部变量i的生命周期就已经结束了,所以你在第二个for循环中已经不能再使用这个变量了。这一点和C++不同,C++的编译器作了特殊的处理了,针对这种情况。
    2008年9月15日 12:08
    版主
  •  周雪峰 写:
    你好!
       在第一个for循环结束的时候局部变量i的生命周期就已经结束了,所以你在第二个for循环中已经不能再使用这个变量了。这一点和C++不同,C++的编译器作了特殊的处理了,针对这种情况。

     

    谢谢 难道VS2008 不支持C++编译语法?

    2008年9月15日 14:13
  •     在VS2008中VC++的编译器作了很大的改动以支持托管的C++,当然还有其他的一些改动。根据C++标准中的规定,你的代码中的错误编译器应该是报错的,但是VC++6的很多特性并不是和C++标准一致的,实际上VC++6的编译器帮你修改了你的这个错误。这是个历史遗留的问题了。实际上你使用很多开源的C++编译器都会报告这个错误。话题说的有些远了,但是我想你会对这段历史有兴趣的。
       作为一种好的编程习惯,即使编译器不报错,也不要这样写,这样会造成混乱和表意不清。
    2008年9月15日 14:45
    版主
  • 谢谢你的解答 看来 学习之路任重道远啊

    2008年9月15日 15:03