标签作为值(IBM 扩展)

如果类型为 void* 的常量有效,那么可以获取当前函数或包含函数中定义的标签的地址并将其用作值。 当标签是一元运算符 &&的操作数时,地址是返回值。 使用标签地址作为值的能力是 C99 和 C++的扩展,实现此功能是为了便于移植使用 GNU C 开发的程序。

在以下示例中,计算的 goto 语句使用 label1label2 的值来跳至函数中的那些点。
int main()
{
   void * ptr1, *ptr2;
   …
   label1: …
   …
   label2: …
   …
   ptr1 = &&label1;
   ptr2 = &&label2;
   if (…) {
      goto *ptr1;
   } else {
      goto *ptr2;
   }
   …
}