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'处使用过时的绑定
答案 0 :(得分:0)
Microsoft为其编译器做了扩展,如果启用,for
循环变量的范围将扩展到外部范围,并且该示例将无法编译。这不再符合标准,这是历史遗留问题。可以在项目设置中禁用扩展名。