循环重定义问题(很奇怪)

winfylau 2003-05-13 09:41:12
今天写类,发现一个有趣的问题,将问题简化后写了如下一段程序:
为什么呢?????这样做会造成什么影响???

#include <iostream.h>

void main()
{
/**** 用这个居然可以编译通过! ***/
int i;
for(i=0; i<=10; i++)
{
int a; // 为什么不会提示重定义????
a=i;
cout << "\na = " << a;
}


/************用这里的就会提示redifinition (重复定义)***/
/*
int a;
a=7;
int a;
a=10;
*/
}
...全文
21 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Peterwby 2003-05-14
用名字空间
回复
hyifeng 2003-05-14
使用全局的a
::a = 1;
回复
hyifeng 2003-05-14
我都被你搞傻了,
我说说我的意见吧,

int a;
{
int a;//与前面的a不在同一个域,遮盖了前面的a
a = 1;//也就是说赋值语句,操作的是括号内的a
}//到这里,括号内的a已经释放了
int a;//这个a和第一个a在同一个作用域,redefine
回复
zolas 2003-05-14
楼上我想问问,如果在for循环里我想用main作用域的那个“a”怎么办?
如果此时外部还定义了一个全局的a,那个a怎么引用啊?
回复
sirouni2003 2003-05-14
在for{}中定义的int a,隐藏了main函数中的int a的作用域,main中的int a 变成不可见的(右书上称之为‘可见星’),当在for{}结束的时候里面的int a生存期结束,main中的int a又变得可见了。
回复
overawe 2003-05-13
//是这样吧 真的通过了 ft
//不明白 请高手指点

#include <iostream.h>

void main()
{
/**** 用这个居然可以编译通过! ***/
int a;
for(a=0; a<=10; a++)
{
int a; // 为什么不会提示重定义????
a=a;
cout << "\na = " << a;
}


/************用这里的就会提示redifinition (重复定义)***/
/*
int a;
a=7;
int a;
a=10;
*/
}
回复
ahuinb 2003-05-13
你用的是vc吧,vc编译器允许在块内定义变量
回复
overawe 2003-05-13
是我变傻了么 不明白你说什么呢
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2003-05-13 09:41
社区公告
暂无公告