fork download
  1. #include <stdio.h>
  2.  
  3. void foo(int i)
  4. {
  5. static const void *sw[] = { &&lab_0, &&lab_1, &&lab_2 };
  6.  
  7. if (i < 0 || i >= sizeof(sw)/sizeof(*sw)) {
  8. printf("out of range\n");
  9. return;
  10. }
  11.  
  12. goto *sw[i];
  13.  
  14. lab_0:
  15. printf("lab_0\n");
  16. return;
  17.  
  18. lab_1:
  19. printf("lab_1\n");
  20. return;
  21.  
  22. lab_2:
  23. printf("lab_2\n");
  24. return;
  25.  
  26. }
  27.  
  28. int main(void) {
  29. for (int i = -1; i < 4; ++i)
  30. foo(i);
  31. return 0;
  32. }
  33.  
Success #stdin #stdout 0s 4500KB
stdin
Standard input is empty
stdout
out of range
lab_0
lab_1
lab_2
out of range