有谁遇到过?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》