while inside switch语句如何在c中工作
How Do while inside switch statement works in c
我有一个代码片段,其中 do while 语句位于 case0 的 switch 条件内,默认情况下 case 值为 case1 但它似乎执行 case0。程序 print 的输出是 6。这怎么可能,谁能解释一下这里的代码流程。预先感谢您的回答。
int main()
{
int a = 1, t =0,n=2;
switch(a)
{
case 0:
do
{
t++;
case 4:t++;
case 3:t++;
case 2:t++;
case 1:t++;
}while(--n>0);
printf("%d",t);
}
return(0);
}
这在 Duff's device 中已知。
case
大多只是标签。
因为一开始a是1,所以会执行case 1。然后满足循环条件,因此它会再次循环并执行t++;
和所有其他情况,直到再次测试循环条件并中断循环。
要退出开关,请在每个 case 之前使用 break 命令。
开关盒类似于 goto
的标签。
您从 case 1
开始,这是 内部 循环——有效地使用它作为你的起点——然后正常执行循环,同时“通过”案例。
这是使用 goto
的等价物:
int main()
{
int a = 1, t =0,n=2;
if (a == 0)
goto case_0;
if (a == 1)
goto case_1;
if (a == 2)
goto case_2;
if (a == 3)
goto case_3;
if (a == 4)
goto case_4;
case_0:
do {
t++;
case_4:
t++;
case_3:
t++;
case_2:
t++;
case_1:
t++;
} while (--n > 0);
printf("%d",t);
}
(实际生成的代码可能使用跳转 table 而不是一系列条件,但行为是相同的。)
我有一个代码片段,其中 do while 语句位于 case0 的 switch 条件内,默认情况下 case 值为 case1 但它似乎执行 case0。程序 print 的输出是 6。这怎么可能,谁能解释一下这里的代码流程。预先感谢您的回答。
int main()
{
int a = 1, t =0,n=2;
switch(a)
{
case 0:
do
{
t++;
case 4:t++;
case 3:t++;
case 2:t++;
case 1:t++;
}while(--n>0);
printf("%d",t);
}
return(0);
}
这在 Duff's device 中已知。
case
大多只是标签。
因为一开始a是1,所以会执行case 1。然后满足循环条件,因此它会再次循环并执行t++;
和所有其他情况,直到再次测试循环条件并中断循环。
要退出开关,请在每个 case 之前使用 break 命令。
开关盒类似于 goto
的标签。
您从 case 1
开始,这是 内部 循环——有效地使用它作为你的起点——然后正常执行循环,同时“通过”案例。
这是使用 goto
的等价物:
int main()
{
int a = 1, t =0,n=2;
if (a == 0)
goto case_0;
if (a == 1)
goto case_1;
if (a == 2)
goto case_2;
if (a == 3)
goto case_3;
if (a == 4)
goto case_4;
case_0:
do {
t++;
case_4:
t++;
case_3:
t++;
case_2:
t++;
case_1:
t++;
} while (--n > 0);
printf("%d",t);
}
(实际生成的代码可能使用跳转 table 而不是一系列条件,但行为是相同的。)