标记语句:

标记语句可以给语句加上一个标签作为前缀。标记语句可以出现在块中,但是不允许它们作为嵌入语句

  • labeled-statement:(标记语句:)

  • identifier   :   statement(标识符   :   语句)

标记语句声明了一个标签,它由一个标识符来命名。标签的范围为在其中声明了该标签的整个块,包括任何嵌套块。两个同名的标签若具有重叠的范围,则会产生一个编译时错误。

一个标签可以在该标签的范围内被 goto 语句(第 8.9.3 节)引用。这意味着 goto 语句可以在它所在的块内转移控制,也可以将控制转到该块外部,但是永远不能将控制转入该块所含的嵌套块的内部。

标签具有自己的声明空间,并不影响其他标识符。示例

int F(int x) {
   if (x >= 0) goto x;
   x = -x;
   x: return x;
}

是有效的,尽管它将 x 同时用作参数和标签的名称。

执行一个标记语句就是执行该标签后的那个语句。

除由正常控制流程提供的可到达性外,如果一个标签由一个可到达的 goto 语句引用,则该标记语句是可到达的。(例外:如果 goto 语句在一个包含了 finally 块的 try 中,标记语句本身在 try 之外,而且 finally 块的结束点不可到达,则从该 goto 语句不可到达上述的标记语句。)


备注:转自https://msdn.microsoft.com/zh-cn/library/aa664740(v=vs.71).aspx