如果没有大括号跟随 while 循环,如何解释代码?



我是编程新手,无法理解编译器如何解释以下代码。正如您在代码中注意到的那样,while 循环在其后面的代码周围没有大括号。有人可以一步一步地向我解释这个循环是如何工作的:

int num = 0;
while(++num < 6) 
Console.WriteLine(++num);
Console.WriteLine(num++);
Console.WriteLine(++num);

不带大括号的 while 循环与在其正下方的行周围用大括号括起来的 while 循环相同:

int num = 0;
while(++num < 6) 
{
Console.WriteLine(++num);
}
Console.WriteLine(num++);
Console.WriteLine(++num);

第一次迭代:

while(1 < 6) // num is 1
{
Console.WriteLine(2); // num is 2
}

第二次迭代:

while(3 < 6) // num is 3
{
Console.WriteLine(4); // num is 4
}

第三次迭代:

while(5 < 6) // num is 5
{
Console.WriteLine(6); // num is 6
}

在第四次迭代中,num变为 7,然后由< 6检查,其计算结果为 false。while 循环退出,下面的两行被执行。

// num is 7
Console.WriteLine(7); // num is 8
Console.WriteLine(9); // num is 9

所以它打印 2、4、6、7、9

由于省略大括号会很快导致意外行为或难以阅读的代码,因此最好始终编写它们,即使不需要也是如此。考虑以下代码(我故意省略了缩进(:

int i, j;
for (i=0;i<10;i++)
for (j=0;j<10;j++)
if (j > i)
continue;
foo(i, j);

没有人能够阅读它,即使你添加空格,它也很容易出错。此外,如果您以后需要在 if (( 条件中添加另一行,您很可能会忘记添加大括号。(这个例子很差:foo(i,j( 只会被调用一次,循环什么也不做!

还要注意您问题中的以下略微修改的代码:

int num = 0;
while(++num < 6); // Careful: a semicolon ends the statement
Console.WriteLine(++num);

这将在调用一次 Console.WriteLine 之前运行循环六次,因为分号结束了语句。

最新更新