我遇到了我无法理解的这部分代码:
} else if(ev != PROCESS_EVENT_POLL) {
continue;
}
again: //What this line do?
u = NULL;
for(t = timerlist; t != NULL; t = t->next) {
again:
行是困扰我的行。任何解释都会受到欢迎。
答案 0 :(得分:7)
此again:
称为label
。对于某些代码位置,它们基本上用作标记。它们本身不会影响代码流。
引用C11
标准,章节§6.8.1,标记语句,一般语法为
labeled-statement:
identifier : statement
案例
constant-expression : statement
默认:statement
其中case
和default
是两个预定义和保留标签名称,用于特殊目的。
另外,关于语义,
任何语句前面都可以有一个前缀,用于将标识符声明为标签名称。标签本身不会改变控制流程,而控制流程在它们之间继续畅通无阻。
最常见的一个[ mis(?)]场景:使用goto
。
一种广泛使用但不太引人注意的情况:使用switch
声明。
答案 1 :(得分:3)
这是代码中的标签。一个可以与GOTO一起使用。
goto labelname;
label: //stuff
答案 2 :(得分:0)
正如其他人所解释的那样,冒号后面的单词是一个标签,作为goto
跳跃的目标点。
第二行中显示的continue
关键字表示这是某个循环的一部分。在这种情况下,为标签选择的单词(' 再次')表明它是部分重复迭代的起点(完全重新迭代最有可能完成continue
)。