我遇到了这段代码,我无法理解:
} else if(ev != PROCESS_EVENT_POLL) {
continue;
}
again: //What this line do?
u = NULL;
for(t = timerlist; t != NULL; t = t->next) {
Run Code Online (Sandbox Code Playgroud)
这条线again:是困扰我的那条线.任何解释都会受到欢迎.
这again:被称为a label.它们基本上用作某些代码位置的标记.它们本身不会影响代码流.
引用C11标准,章节§6.8.1,Labeled语句,一般语法是
labeled-statement:
identifier : statement案例
constant-expression : statement
默认值:statement
其中case和default是两个预定义和保留的标签名称,用于特殊目的.
另外,关于语义学,
任何语句都可以在前缀之前声明标识符作为标签名称.标签本身并不会改变控制流程,而这种控制流程在它们之间继续畅通无阻.
一个最常见的[ mis(?) ]使用场景:with goto.
一个广泛使用但不太引人注意的场景:switch声明.