为什么两个FOR循环的相同变量声明是对的?

时间:2015-09-13 13:00:13

标签: c

for(int i = 0 ; i<n ; i++) { do something }

具有等效的while循环:

int i = 0;
while(i<n) {
  do something
  i++;
}

现在,

for(int i = 4 ; false ; );
print i;//prints 4
for(int i = 7 ; false ; );
print i;//prints 7

根据我的理解,必须相当于:

int i = 4;
while(false);
int i = 7;
while(false);

这是'i'的两次声明。而且,明显的错误。

现在,为什么for循环中的'i'没有重新声明错误?

在给出两个警告后

代码运行:

警告:'i1'的名称查找已更改为新的ANSI'用于'范围

警告:在'i1'处使用过时的绑定

1 个答案:

答案 0 :(得分:0)

Microsoft为其编译器做了扩展,如果启用,for循环变量的范围将扩展到外部范围,并且该示例将无法编译。这不再符合标准,这是历史遗留问题。可以在项目设置中禁用扩展名。