我想了解这是如何运作的。任何帮助将不胜感激。
#include<stdio.h>
void duff(int count)
{
int n=(count+7)/8;
printf("n=%d count =%d\n",n,count%8);
switch(count%8){
case 0: do{ printf("case 0\n");
case 7: printf("case 7\n");
case 6: printf("case 6\n");
case 5: printf("case 5\n");
case 4: printf("case 4\n");
case 3: printf("case 3\n");
case 2: printf("case 2\n");
case 1: printf("case 1\n");
}while( --n >0);
}
}
main(){
int count;
scanf("%d",&count);
duff(count);
}
基本上,如果switch case评估为case语句2,则永远不会执行while的do语句。但我运行这个程序,它给了我输出,但无法解释:
输出:
3
n = 1计数= 3
案例3
案例2
案例1
答案 0 :(得分:2)
这被称为duff的设备,用于代码优化技术以减少分支指令。它起作用的原因是默认情况下没有中断的case语句会进入下一个案例,因此当你遇到案例3时,你会继续讨论案例2和案例1。
答案 1 :(得分:0)
案件之间没有break
陈述,因此案件落空。因此,n = 3会导致执行case 3:
case 2:
和case 1:
。
答案 2 :(得分:0)
do
和case
“语句”基本上只是“转到标签”。他们不添加任何实际代码。他们只是告诉while
和switch
(分别)跳到哪里。换句话说,do
到(不)执行没有代码。
(也就是说,C语法允许cases
在switch
的孩子中存在,而不仅仅是switch
的直接孩子,这有点显着/奇怪。)