windows server 2003+ vc 6.0 vs 局部变量和全局变量
这是我写的一个程序,运行环境如上所述
#include "iostream.h"
void func1();
int n = 1; //全局变量
int main()
{
static int a;
int b=-10;
cout<<"global,static variable\n"<<endl;
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
b+=4;
func1();
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
n+=10;
func1();
return 0;
}
void func1()
{
static int a = 2; //静态局部变量
int b = 5; //局部变量
a += 2;
b += 5;
n = n + 12;
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
}
编译后输出如下:
a:0 b:37777777766 n:1
a:4 b:12 n:15
a:0 b:37777777772 n:15
a:6 b:12 n:43
你们看看b和n对吗?是不对的吧,可是为什么呀,程序应该没有问题,难道是编译器有问题?
请高手指点!
问题点数:20、回复次数:9Top
1 楼sunman1982(冥王星)回复于 2005-05-19 14:15:10 得分 10
在dev上运行正常……Top
2 楼sunman1982(冥王星)回复于 2005-05-19 14:17:29 得分 0
windows2000+vc6 正常Top
3 楼sunman1982(冥王星)回复于 2005-05-19 14:18:07 得分 0
a:0b:-10n:1
a:4b:10n:13
a:0b:-6n:13
a:6b:10n:35
Press any key to continueTop
4 楼lclvcstudy(ddddd)回复于 2005-05-19 14:19:53 得分 0
这个我知道,但是在windows server 2003 企业版就是我上面的结果,为什么呢?Top
5 楼lclvcstudy(ddddd)回复于 2005-05-19 14:21:02 得分 0
难道是windows版本升级了,不兼容vc6.0,只支持vs2003?Top
6 楼thunderclap(认识事物都有两面性)回复于 2005-05-19 16:09:22 得分 10
windows server 2003 + vs2003正常Top
7 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-19 17:05:33 得分 0
还真是编译器不支持?Top
8 楼lclvcstudy(ddddd)回复于 2005-05-19 17:06:05 得分 0
我刚才又调试了一下,发现加上using namespace std可以正常通过
但是我又发现了下面的这个问题:请回答
#include "iostream.h"
void func1();
int n = 1; //全局变量
int main()
{
int number = 1001;
static int a;
cout<<"\nC++ is Fun!!!"<<endl
<<"Decimal:"<<dec<<number<<endl
<<"Hexadecimal:"<<hex<<number<<endl
<<"Octal:"<<oct<<number<<"\n"<<endl;
int b=-10;
cout<<"global,static variable\n"<<endl;
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
b+=4;
func1();
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
n+=10;
func1();
return 0;
}
void func1()
{
static int a = 2; //静态局部变量
int b = 5; //局部变量
a += 2;
b += 5;
n = n + 12;
cout<<"a:"<<a<<"b:"<<b<<"n:"<<n<<endl;
}
编译后输出如下:
a:0 b:37777777766 n:1
a:4 b:12 n:15
a:0 b:37777777772 n:15
a:6 b:12 n:43
这时候在windows server 2003中不论是vs2003还是vc6.0都是上述结果,如果把输出十六进制和
八进制的两个语句去掉或者放在程序的最后输出,那么就是正确的。
请高手指点!
Top
9 楼lclvcstudy(ddddd)回复于 2005-05-20 10:27:09 得分 0
我知道了,研究出来了,是因为八进制一旦在输出流里有效,那么以后都默认有效。所以后面要是再输出其他进制的数就要再次进行设置。好了可以结贴了。呵呵,把分数给谁呢?Top




