Advertisement
ptkrisada

optimize2.c

Dec 9th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.45 KB | None | 0 0
  1. /* optimize2.c */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <setjmp.h>
  5.  
  6. static void f1(int, int, int);
  7. static void f2();
  8.  
  9. static jmp_buf jmpbuf;
  10.  
  11. int main()
  12. {
  13.     int a;
  14.     register int b;
  15.     volatile int c;
  16.  
  17.     a = 1; b = 2; c = 3;
  18.     if (setjmp(jmpbuf) != 0) {
  19.         printf("after longjmp: a = %d, b = %d, c = %d\n", a, b, c);
  20.         exit(0);
  21.     }
  22.     a = 91; b = 92; c = 93;
  23.     f1(a, b, c);
  24.  
  25.     return 0;
  26. }
  27.  
  28. static void f1(int i, int j, int k)
  29. {
  30.     printf("in f1(): a = %d, b = %d, c = %d\n", i, j, k);
  31.     f2();
  32. }
  33.  
  34. static void f2()
  35. {
  36.     longjmp(jmpbuf, 1);
  37. }
  38.  
  39. ************
  40. * OUTPUT 1 *
  41. ************
  42. % gcc -W -Wall -O2 -ansi -pedantic -s optimize2.c
  43. % ./a.out
  44. in f1(): a = 91, b = 92, c = 93
  45. after longjmp: a = 1, b = 2, c = 93
  46. %
  47. ************
  48. * OUTPUT 2 *
  49. ************
  50. Keep optimized.c unchanged, but drops compiler optimization.
  51. % gcc -W -Wall -ansi -pedantic -c optimize2.c
  52. optimize2.c: In function 'main':
  53. optimize2.c:14:15: warning: variable 'b' might be clobbered by 'longjmp' or 'vfork' [-Wclobbered]
  54.   register int b;
  55.                ^
  56. % ./a.out
  57. in f1(): a = 91, b = 92, c = 93
  58. after longjmp: a = 91, b = 2, c = 93
  59. %
  60. ************
  61. * OUTPUT 3 *
  62. ************
  63. In optimize2.c, line 15, drops volatile.
  64. So c is declared as 'int c'.
  65. And enable compiler optimization.
  66. % gcc -W -Wall -O2 -ansi -pedantic -s optimize2.c
  67. % ./a.out
  68. in f1(): a = 91, b = 92, c = 93
  69. after longjmp: a = 1, b = 2, c = 3
  70. %
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement