Mahlzeit Forum :)
Wie kann ich dem GCC mitteilen das er für ein zusammenhängendes Switch
Konstrukt eine Sprungtabelle erzeugen soll?
Wenn ich also habe:
1 | switch(foo)
|
2 | {
|
3 | case 0:
|
4 | // Code
|
5 | break;
|
6 | case 1:
|
7 | // Code
|
8 | break;
|
9 | case 2:
|
10 | // Code
|
11 | break;
|
12 | // Weiter von 3 bis...
|
13 | case 14:
|
14 | // Code
|
15 | break;
|
16 | case 15:
|
17 | // Code
|
18 | break;
|
19 | }
|
Soll daraus intern im Compiler nicht umbedingt das da werden:
1 | if(foo==1){...code...}
|
2 | if(foo==2){...code...}
|
3 | if(foo==3){...code...}
|
4 | ...
|
5 | if(foo==14){...code...}
|
6 | if(foo==15){...code...}
|
Sondern eher:
1 | const int footab[] = {footab_pointer0,footab_pointer1,...,footab_pointer15}; //Geht das so?
|
2 | goto footab[foo]; // Ja, ich weis, wenn hier was anderes als 0..15 ankommt springt er ins Nirvana.
|
3 |
|
4 | footab_pointer0:
|
5 | // Code
|
6 | goto keinfoo;
|
7 | footab_pointer1:
|
8 | // Code
|
9 | goto keinfoo;
|
10 | footab_pointer2:
|
11 | // Code
|
12 | goto keinfoo;
|
13 | ...
|
14 | footab_pointer14:
|
15 | // Code
|
16 | goto keinfoo;
|
17 | footab_pointer15:
|
18 | // Code
|
19 | keinfoo:
|
EDIT: Kleine Berichtigung am letzten Beispiel...