-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path018_demo_features.c
44 lines (35 loc) · 1.07 KB
/
018_demo_features.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <setjmp.h>
jmp_buf env;
int globalVar = 0;
static int staticVar = 0;
void func() {
int automaticVar = 0;
volatile int volatileVar = 0;
printf("Before longjmp:\n");
printf(" globalVar: %d\n", globalVar);
printf(" staticVar: %d\n", staticVar);
printf(" automaticVar: %d\n", automaticVar);
printf(" volatileVar: %d\n", volatileVar);
longjmp(env, 1);
printf("After longjmp (which should never be reached):\n");
printf(" globalVar: %d\n", globalVar);
printf(" staticVar: %d\n", staticVar);
printf(" automaticVar: %d\n", automaticVar);
printf(" volatileVar: %d\n", volatileVar);
}
int main() {
int ret = setjmp(env);
int automaticVar; // Declare automaticVar within main()
volatile int volatileVar; // Declare volatileVar within main()
if (ret == 0) {
func();
} else {
printf("After setjmp:\n");
printf(" globalVar: %d\n", globalVar);
printf(" staticVar: %d\n", staticVar);
printf(" automaticVar: %d (undefined)\n", automaticVar);
printf(" volatileVar: %d\n", volatileVar);
}
return 0;
}