Variable's validity range
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Why can't a duplicate variable name be declared in a nested local scope?
嘿,伙计们,今天我发现了一个问题,对此我不确定:
我认为下面的例子应该是正确的,因为大括号创建了一个新的局部区域,所以我不能访问大括号后的第一个x,我应该能够在右大括号后创建一个同名的新变量。
1 2 3 4 | { int x = 0; } int x; |
但是如果我尝试这个例子,我会得到错误:不能在此作用域中声明局部变量名"x",因为它将赋予"temp"不同的含义,temp已在父级或当前作用域中用于表示其他内容。
在C语言中真的不允许吗?这也可能是Resharper 7.0或Visual Studio 2012的错误。
请不要想出糟糕的编码风格,这只是我对C的基本理解。
谢谢你,祝你今天愉快;)
问题是,优先权并不重要。你不会指望这会奏效的:
1 2 3 4 | int x; { int x = 0; } |
为什么不呢?因为第一个变量的范围扩展到了花括号中。即使第二个变量的范围没有扩展到这些括号之外,声明第二个变量也会导致问题。
如果您颠倒顺序,同样的原则也适用。第一个变量不会阻止您声明第二个变量,但第二个变量会阻止您声明第一个变量。
如果在自己的范围内创建第二个变量,它将按照预期的方式运行。
1 2 3 4 5 6 | { int x = 0; } { int x; } |