For循环变量作用域问题

FrankSun80 2010-05-20 09:51:43

for (int n=0;n<MAXUNITE;n++)
{
if( Fun(n) )
break;
}
int y=n;



这段c++代码能在vs2008中编译通过吗?我这里通不过,因为变量n未定义。。。

如果能,需要怎样的设置?
...全文
299 27 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
应该不可以,即使可以,那个n也是一个未知数
liutengfeigo 2010-05-20
  • 打赏
  • 举报
回复
没办法,按照标准的来吧
wade_2003 2010-05-20
  • 打赏
  • 举报
回复
新的版本是通不过的
dskit 2010-05-20
  • 打赏
  • 举报
回复
这是非标准的丑陋的用法,VC6可以,建议不要这样使用
向立天 2010-05-20
  • 打赏
  • 举报
回复
VS2005以后的版本都不可以
delphiwcdj 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhangweiit 的回复:]

我说的前两点,是在C老标准中,for中不能定义变量
[/Quote]
C99好像可以在for中定义变量的吧
6.8.5.3 If clause-1 is a declaration, the scope of anyidentifiers it declares is the remainder of the declaration and the entire loop, including the other two expressions;
juniorbeginner 2010-05-20
  • 打赏
  • 举报
回复
个人建议尽量不要这样做,如果需要使用该值的话就在for之前做declare
delphiwcdj 2010-05-20
  • 打赏
  • 举报
回复
P.99
If the for-init-statement is a declaration, the scope of the name(s) declared extends to the end of the for-statement.

int i = 42;
int a[10];
for (int i = 0; i < 10; i++)
a[i] = i;
int j = i; // j = 42
delphiwcdj 2010-05-20
  • 打赏
  • 举报
回复
说错了,应该是x03
If the for-init-statement is a declaration, the scope of the name(s)
statement. [Example:
int i = 42;
int a[10];
for (int i = 0; i < 10; i++)
a[i] = i;
int j = i; // j = 42
cattycat 2010-05-20
  • 打赏
  • 举报
回复
vc6是可以的,vs08就不行了
delphiwcdj 2010-05-20
  • 打赏
  • 举报
回复
在VC6可以这样但是这种做法并不符合c99标准,而VC9对标准支持的更好,所以在VC9中这段代码编译是会报错的。
zhangweiit 2010-05-20
  • 打赏
  • 举报
回复
我说的前两点,是在C老标准中,for中不能定义变量
zhangweiit 2010-05-20
  • 打赏
  • 举报
回复
我刚才说的有点错,不好意思,我看错了
其实楼主的问题关键是把for中的n用在for之外

不过,我说的第三种办法是可以解决的
zhangweiit 2010-05-20
  • 打赏
  • 举报
回复
有几种做法都可以解决
1,你在编译选项里面加个
-std=c99就可以通过(至少在GCC里面用这个选项就可以解决这个问题)


2,选项设置里面,把语言设置为用c++方式编译

3,把int n 从for 中拿出来
int n;
int y;
for (n=0;n<MAXUNITE;n++)
{
if( Fun(n) )
break;
}

y = n;

在C中,变量都是要先定义的,不能在半当中定义,不然会出错


ithiker 2010-05-20
  • 打赏
  • 举报
回复
vc6.0可以
2008不可以,因为n的作用域只for循环体
linsen_519 2010-05-20
  • 打赏
  • 举报
回复
错误的CODE啊! 为什么非要让它编译通过呢?不懂
pengzhixi 2010-05-20
  • 打赏
  • 举报
回复
如果是老编译器可以通过。新的不可以。n的作用域只限于for循环体。
白云飘飘飘 2010-05-20
  • 打赏
  • 举报
回复
编译选项的C语言选项里面可以设置
jakiejiajia 2010-05-20
  • 打赏
  • 举报
回复
lz, 这是作用域问题,你的n是在for循环中定义的,所以只有在for循环的语句块中才有效,在外面是不能引用的,我想这样解释楼主应该能懂把
parker0521 2010-05-20
  • 打赏
  • 举报
回复
我们老师都是让我们用6.0的,你这种情况我们老师也说过了。但是他只是说不能这样用,我也不知道为什么,后来才知道的/‘
加载更多回复(7)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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