値としてのラベル

現在の関数内、または収容側関数に定義されているラベルのアドレスは、void* 型の定数が有効な場合はいつでも、値として取得し使用することができます。 このアドレスは、ラベルが単項演算子 && のオペランド の場合は戻り値になります。ラベルのアドレスを値として使用する機能は、 C99 および C++ に対する直交拡張機能で、 GNU C で開発されたプログラムの移植を容易にするためにインプリメントされています。

以下の例で、計算済みの goto 文は label1 および label2 の値を使用して、関数内のこれらのスポットにジャンプします。

int main()
{
   void * ptr1, *ptr2;
   ...
   label1: ...
   ...
   label2: ...
   ...
   ptr1 = &&label1;
   ptr2 = &&label2;
   if (...) {
      goto *ptr1;
   } else {
      goto *ptr2;
   }
   ...
}

関連参照

IBM Copyright 2003