(目标C代码)
int i=5;
{
int i=i;
NSLog(@"Inside Scope: %i",i);
}
NSLog(@"Outside Scope: %i",i);
打印:
3385904(垃圾)
5
将int i = i;
替换为int i= 10;
正确打印...(在范围内i
)
如:
10
5
和(仅此代码)
int i=i;
编译,但会立即发生段错误。
这些语法中的任何一个有效吗?它们有什么用处,或者它们是否应该早先被捕获的编译器错误?
是否有必要在新类型的新范围内使用相同的变量名称,以及如何区分?
我唯一的想法可能是for() loop
,因为如果你有两个循环,编译器会感到不安,你会重新定义int i;
两次。
答案 0 :(得分:1)
因为您正在重新定义i,所以您将i设置为尚未设置的自身值。
简单地说明一下:
int i=5;
{
int i=i;
}
进入这个:
int i = i;
//int i=5;
//{
//int i=i;
//}
会给你相同的结果。这个问题与范围无关。