コンパイラ最適化について勉強していました。
まず、C言語では、gccで以下のような記述ができます。
c
1void main() 2{ 3 int i = 1; 4 void *labels[2] = { &&LABEL0, &&LABEL1 }; 5 goto *labels[i]; 6LABEL0: 7 printf("LABEL0\n"); 8 goto END; 9LABEL1: 10 printf("LABEL1\n"); 11 goto END; 12END: 13 printf("END\n"); 14}
&&LABEL0
というのは、gccの拡張文法です。
これは、labelが何十個と増えた場合に、if else文やswitch文より高速に動作するように思えます。
ここで、C#で上記と同様の内容を書くことはできないでしょうか?というのが質問です。すなわち、ラベルを値として扱えないか、ということです。
なお、以下は試してみましたがダメでした。
cs
1void main() 2{ 3 int i = 1; 4 switch (0) 5 { 6 case 0: goto case i+1; //定数値が必要です。 7 case 1: Console.WriteLine("i=0"); break; 8 case 2: Console.WriteLine("i=1"); break; 9 } 10}
また、そもそもこの質問がちんぷんかんぷんなことを言っていた場合、それも指摘くださると嬉しいです。
回答6件
あなたの回答
tips
プレビュー