読者です 読者をやめる 読者になる 読者になる

C言語(GCC)の&&のもう一つの使い方

"&&"と言えば論理演算子ですが、gccの拡張文法では以下のようにして、gotoのラベルを配列に入れることができます。

include<stdio.h>
int main(int argc, char* argv[]) {
  static void* LABELS[] = {&&LABEL0, &&LABEL1, &&LABEL2};
  goto *LABELS[(int)(argv[1][0] - '0')];
  LABEL0: printf("label0\n"); return 0;
  LABEL1: printf("label1\n"); return 0;
  LABEL2: printf("label2\n"); return 0;
  return -1;
}

mrubyのvm.cの315行-と343行-からでも使われてます。