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

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;
*/
}
...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
是我变傻了么 不明白你说什么呢

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧