我发现,具有这种结构的C代码:Do..while内切换
switch (n) {
do {
case 1:
// do some things
if (some condition)
goto go_on;
case 2:
// do some things
if (some condition)
goto go_on;
case 3:
// do some things
if (some condition)
goto go_on;
} while (1);
do {
case 4:
// do some things
if (some condition)
goto go_on;
case 5:
// do some things
if (some condition)
goto go_on;
} while (1);
}
go_on:
我用C编程年(很多年前),并会认为这将是一个语法错误。我认为这与优化循环有关,但我想知道是否有人可以解释它的作用。当到达while(1)
时会发生什么,它是否会有效返回交换机?特别是为什么有两种做...在那里?
顺便说一下,我不要想开始讨论使用goto
或如果这是不好的设计。我没有写这个,我假设作者这样做,因为它使循环运行尽可能快。
看起来像[Duff's Device]的变体(https://en.wikipedia.org/wiki/Duff's_device)。这里有一个[解释](https://stackoverflow.com/questions/514118/how-does-duffs-device-work)。 – tangrs 2014-09-29 14:05:17
将'case'语句看作标签,'switch'为'goto'。 – chux 2014-09-29 14:07:16
这是一种循环展开技术。考虑循环结束。 – Alex 2014-09-29 14:09:54