【发布时间】:2017-02-23 10:36:03
【问题描述】:
我在Duff's Device 的维基百科页面上遇到了这种语法。
该页面提到,在这种情况下,这种结构有助于满足一些模除要求,特别是 8,如下所示:
send(to, from, count)
register short *to, *from;
register count;
{
register n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++; /* {int somevar =0;} */
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
}
当主循环块位于case 0 时,控制如何达到case 5?
它在语法上如何正确?另外,为什么 case 语句中的变量声明仅限于块范围?
[编辑]
引用同一页中的行,“...C 编程语言的第一版,它只要求 switch 的主体是语法上有效的(复合)语句,其中 case 标签可以出现在任何子语句的前缀...”。
我相信这是一个答案,但是为什么大师们会选择这样做呢?
【问题讨论】:
-
in the Wikipedia article 的解释还不足以描述它的工作原理吗?并且 comment 不在 Wikipedia 中,所以你从哪里复制了这个 sn-p?
-
我为我的问题的第二部分添加了它。
-
因为他们不是“大师”,他们是先驱。那里有很大的不同。根据定义,建造第一所房子的人并不是历史上最好的建筑商。一般而言,K&R 对适当的程序设计一无所知。
标签: c syntax switch-statement do-while