首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有哪位高手遇到过?vc6与vc++2005的for中变量范围有关问题

2012-02-28 
有谁遇到过?vc6与vc++2005的for中变量范围问题这段程序#includeiostreamusingnamespacestdinti100int

有谁遇到过?vc6与vc++2005的for中变量范围问题
这段程序
#include   <iostream>  
using   namespace   std   ;  
int   i   =   100   ;  
int   sum   =   0   ;  
int   main()  
{  
        for(   int   i   =   0   ;   i   !=   10   ;   ++i   )  
                sum   +=   i   ;  
        cout   < <   i   < <   "   "   < <   sum   < <   endl   ;  


getchar();
        return   0   ;  
}  
在vc6下输出10 45,而在vc++2005下输出100 45
我查了google,好像是因为vc++2005采用新c++标准。可以使用编译选项来设置for的作用范围。
我想知道如何在vc6下也能输出100 45?


还有:vc6下两个for中:
for(int   index=0;...)
//dosomethingA
for(int   index=0;...)
//dosomethingB
这样也是不行的,报重复定义错。而这在vc2005下没错。怎么让vc6也能编译?

刚学c++,请大家帮忙!QQ:276605216


[解决办法]
还有:vc6下两个for中:
for(int index=0;...)
//dosomethingA
for(int index=0;...)
//dosomethingB
这样也是不行的,报重复定义错。而这在vc2005下没错。怎么让vc6也能编译?
------------------------------------------------
这是某些老编译器的毛病,他们把for循环中的循环变量“当成”外层域的一个自动变量来处理,因此会出现“重复定义”的问题,但是这样的代码是符合标准的,在新的编译器中不会出现这种问题,放心用吧:)
[解决办法]
我想知道如何在vc6下也能输出100 45?
-----------------------------------

cout < < i < < " " < < sum < < endl ;
改成
cout < < ::i < < " " < < sum < < endl ;


for(int index=0;...)
//dosomethingA
for(int index=0;...)
//dosomethingB
这样也是不行的,报重复定义错。而这在vc2005下没错。怎么让vc6也能编译?
-------------------------------
这个现在没法做到, 只能写程序时注意不要写这种在不同编译器下有不同行为的Code
另外一种方法, 可以安装ICC9.0, 集成到VC6环境下, 用ICC编译你的Program, 看看行不行.
[解决办法]
比如:
#define for(x) if(1)for(x)
[解决办法]
在C++标准中,
for( int i = 0 ; i != 10 ; ++i )
sum += i ;
中的i作用域只在for语句中。
i在for语句外不能看到
cout < < i < < " " < < sum < < endl ;
中的i为全局域。
故为100
VS2005是对的。

同理
for(int index=0;...)
//dosomethingA
for(int index=0;...)
//dosomethingB
也没有语法错误。

VC6的编译器在这方面没有很好的支持标准。

你可以参考《C++ Primer》

热点排行