Advertisement
Guest User

switch optimization

a guest
Sep 25th, 2014
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void f_1 (void) { printf ("1"); }
  4. void f_2 (void) { printf ("2"); }
  5. void f_3 (void) { printf ("3"); }
  6. void f_4 (void) { printf ("4"); }
  7.  
  8. void binarno_iskanje (int a)
  9. {
  10. if (a == 2)
  11. f_2 ();
  12. else if (a > 2)
  13. goto vecje_od_2;
  14.  
  15. if (a == 1)
  16. f_1 ();
  17. else goto __default;
  18.  
  19. vecje_od_2:
  20. if (a == 3)
  21. f_3 ();
  22. else if (a == 4)
  23. f_4 ();
  24.  
  25. __default:
  26. return;
  27. }
  28.  
  29. void jump_table (int a)
  30. {
  31. const void *__tabela[] = {&&__case_1, &&__case_2, &&__case_3, &&__case_4};
  32.  
  33. int a_1 = a - 1;
  34. if (a_1 > -1 && a_1 < 4)
  35. goto * __tabela [a_1];
  36. else return;
  37.  
  38. __case_1:
  39. f_1 ();
  40. return;
  41. __case_2:
  42. f_2 ();
  43. return;
  44. __case_3:
  45. f_3 ();
  46. return;
  47. __case_4:
  48. f_4 ();
  49. return;
  50. }
  51.  
  52. int main (void)
  53. {
  54. int i;
  55.  
  56. for (i = 1; i != 5; i++) {
  57. binarno_iskanje (i);
  58. printf (", ");
  59. jump_table (i);
  60. printf ("\n");
  61. }
  62.  
  63. return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement