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行-からでも使われてます。