Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* optimize2.c */
- #include <stdio.h>
- #include <stdlib.h>
- #include <setjmp.h>
- static void f1(int, int, int);
- static void f2();
- static jmp_buf jmpbuf;
- int main()
- {
- int a;
- register int b;
- volatile int c;
- a = 1; b = 2; c = 3;
- if (setjmp(jmpbuf) != 0) {
- printf("after longjmp: a = %d, b = %d, c = %d\n", a, b, c);
- exit(0);
- }
- a = 91; b = 92; c = 93;
- f1(a, b, c);
- return 0;
- }
- static void f1(int i, int j, int k)
- {
- printf("in f1(): a = %d, b = %d, c = %d\n", i, j, k);
- f2();
- }
- static void f2()
- {
- longjmp(jmpbuf, 1);
- }
- ************
- * OUTPUT 1 *
- ************
- % gcc -W -Wall -O2 -ansi -pedantic -s optimize2.c
- % ./a.out
- in f1(): a = 91, b = 92, c = 93
- after longjmp: a = 1, b = 2, c = 93
- %
- ************
- * OUTPUT 2 *
- ************
- Keep optimized.c unchanged, but drops compiler optimization.
- % gcc -W -Wall -ansi -pedantic -c optimize2.c
- optimize2.c: In function 'main':
- optimize2.c:14:15: warning: variable 'b' might be clobbered by 'longjmp' or 'vfork' [-Wclobbered]
- register int b;
- ^
- % ./a.out
- in f1(): a = 91, b = 92, c = 93
- after longjmp: a = 91, b = 2, c = 93
- %
- ************
- * OUTPUT 3 *
- ************
- In optimize2.c, line 15, drops volatile.
- So c is declared as 'int c'.
- And enable compiler optimization.
- % gcc -W -Wall -O2 -ansi -pedantic -s optimize2.c
- % ./a.out
- in f1(): a = 91, b = 92, c = 93
- after longjmp: a = 1, b = 2, c = 3
- %
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement