一个很菜的问题,关于for中的变量定义,for(int i=0;;){}

elabs 2004-01-06 02:46:11
我最近在写程序时候发现,当你写在段程序中写

void ss(){
{
for(int i=0;;){
}

//然后重复

for(int i=0;;){
}
}
vc6的编译器会说你的程序中i被重复定义,不知道是它的编译器问题,还是本身c++语法就是这么定义的,有人说vc7中就没事的,手头没有就没试过。

还有呢在java中确实是没有问题的。
...全文
149 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
elabs 2004-01-07
  • 打赏
  • 举报
回复
好了,想知道的都差不多了,放分。
red-fly 2004-01-06
  • 打赏
  • 举报
回复
for ( int i=0; i<100; i++ )
{
//do something
............
}

和下邊是一樣的:
int i;
for ( i=0; i<100; i++ )
{
//do something
............
}
jennifergiant 2004-01-06
  • 打赏
  • 举报
回复
学习中。。。
elabs 2004-01-06
  • 打赏
  • 举报
回复
Kingore(没有希望的过去):

终于找到了正规的解释了,谢谢了。

Disable Language Extension
这个选项的帮助哪能看看啊,MSDN?
Kingore 2004-01-06
  • 打赏
  • 举报
回复
ans:zzutligang(小鸟)
有的啊。哪会只一项的啊!,具体看看帮助
不过这种编译器和语言标准不一样的问题,
最好按标准做,毕竟以后编译器会向标准靠拢的。
(在我看来,这种问题一般不是很大,看自己喜欢的了)
或者换个与标准接近的编译器??(Dev C++? ,GNU c++?)

zzutligang 2004-01-06
  • 打赏
  • 举报
回复
to Kingore(没有希望的过去) :
如果修改了上面的那个选项,会不会影响到其他方面。
我也是新手!^_^
Kingore 2004-01-06
  • 打赏
  • 举报
回复
这是编译器跟语言标准之间的问题。
你那段代码在VC里可以编译通过(不同的编译选项就可以)

修改如下:
在Project->Setting->C/C++ 在Category里选Customize
然后选中Disable Language Extension就可以了。(不使用语言扩展)。
kof99th 2004-01-06
  • 打赏
  • 举报
回复
vc6的问题
YiMM 2004-01-06
  • 打赏
  • 举报
回复
你写的那段程序是合乎标准的
但是vc6不支持
vc7.1,mingw g++等都支持这样的语法
elabs 2004-01-06
  • 打赏
  • 举报
回复
这个我理解,大家可以去下载一下荣耀写的一个代码(http://www.royaloo.com/code/code.htm 里边的Delimited_file部分)
我编译过程中发现就是这个错误。

下边是我给他发的信

> 我在看你的delimfile发现,用vc好像编译不过。是在你的delimfile的531到538行。
>
> for (unsigned int i = 1; i <= row_total_count_; ++i)
> update_cell(tv2[i-1], first_col, i);
>
> delete_col(first_col + 1);
>
> insert_col("first_temp_col", second_col);
>
> for (unsigned int i = 1; i <= row_total_count_; ++i)
> update_cell(tv1[i-1], second_col, i);
>
> delete_col(second_col + 1);
>
> 这里 unsigned int i = 1重复定义,我对这个一直很迷惑,因为在java中这样定义就是没有问题的。不知道是不是由于vc编译器造成的影响。在你的那个测试程序中也有类似的问题。

这个是回复

这是符合标准的C++语法,在vc7/bcc/gcc上都没有问题。

如果你手头的vc版本的确存在这样的问题,自己修改一下代码就是了:)

所以呢,我才提出这个问题,有点疑惑。

WindWay 2004-01-06
  • 打赏
  • 举报
回复
作用域问题。第一个I在整个函数内都有效,再定义第二个当然包错,

这样就不会了

void ss(){
{
for(int i=0;;){


//然后重复

for(int i=0;;){
}
}
}
因为第二个I只在第一个FOR循环内部有效
axiaowin 2004-01-06
  • 打赏
  • 举报
回复
看错了,::
bluebohe 2004-01-06
  • 打赏
  • 举报
回复
这里i的作用域是ss函数而不是for的大括号内
windyloft 2004-01-06
  • 打赏
  • 举报
回复
这是c语言,不是c++
axiaowin 2004-01-06
  • 打赏
  • 举报
回复
重复定义,第二个i定义在第一个i循环里面

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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