这个元素的结尾是":"在代码中意味着什么?

时间:2015-07-17 07:59:45

标签: c syntax

我遇到了我无法理解的这部分代码:

    } else if(ev != PROCESS_EVENT_POLL) {
     continue;
}

again:   //What this line do?

u = NULL;

for(t = timerlist; t != NULL; t = t->next) {

again:行是困扰我的行。任何解释都会受到欢迎。

3 个答案:

答案 0 :(得分:7)

again:称为label。对于某些代码位置,它们基本上用作标记。它们本身不会影响代码流。

引用C11标准,章节§6.8.1,标记语句,一般语法为

  

labeled-statement:

     
    
      
        

identifier : statement

                 

案例 constant-expression : statement
         默认statement

      
    
  

其中casedefault是两个预定义和保留标签名称,用于特殊目的。

另外,关于语义

  

任何语句前面都可以有一个前缀,用于将标识符声明为标签名称。标签本身不会改变控制流程,而控制流程在它们之间继续畅通无阻。

  • 最常见的一个[ mis(?)]场景:使用goto

  • 一种广泛使用但不太引人注意的情况:使用switch声明。

答案 1 :(得分:3)

这是代码中的标签。一个可以与GOTO一起使用。

goto labelname;
label: //stuff

答案 2 :(得分:0)

正如其他人所解释的那样,冒号后面的单词是一个标签,作为goto跳跃的目标点。

第二行中显示的continue关键字表示这是某个循环的一部分。在这种情况下,为标签选择的单词(' 再次')表明它是部分重复迭代的起点(完全重新迭代最有可能完成continue)。