【发布时间】:2015-11-26 20:25:32
【问题描述】:
为什么不允许我使用我在 do 中声明的变量,并在 do/while 循环的 while 部分中使用它?
do
{
index += index;
int composite = index + 1;
// more code here
} while (UnsetBitmask(bitmasks, composite)); // cannot resolve symbol composite
第一次看到这个我以为是编译器错误。所以我多次重新启动 Visual Studio,但它仍然无法识别 while 中的变量。
代码有什么问题,还是编译器的错误?
【问题讨论】:
-
查找变量范围。
composite只存在于你的 do while 循环范围内,而不存在于它之外。 -
为什么应该一个超出范围的变量可以在其范围之外使用?如果你能这样做,那将是一个错误
-
@M.kazemAkhgary
compositeonly 存在于(阅读:{ }内)while 循环中。你试图在循环之外使用它,这是你做不到的。 -
@M.kazemAkhgary 这将打破许多其他范围界定规则。
{ }中定义的东西在它们之外不存在,编译器不应该制造“特殊情况”,通常循环被展开或转换为其他形式,这使得它更加困难。 -
@M.kazemAkhgary 不,它不会。这种行为是不合逻辑的。尝试在其范围之外使用变量是一个明显的错误。事实上,这种任意行为是经典 Visual Basic 的主要痛点之一