1#include <stdio.h>
2
3extern int var;
4extern void (*func_ptr)(void);
5extern void print_var (void);
6extern void print_foo (void);
7extern int foo;
8extern int var2[2];
9
10typedef struct
11{
12  int *   var;
13  void (* func_ptr)(void);
14  int *   var_with_offset;
15}
16TEST;
17
18TEST xyz = { & var, print_var, & var };
19
20const TEST const_xyz = { & var, print_var, & var };
21
22int
23main (void)
24{
25  print_var ();
26
27  printf ("We see var = %d\n", var);
28  printf ("Setting var = 456\n");
29
30  var = 456;
31
32  print_var ();
33  printf ("We see var = %d\n\n", var);
34
35  var = 90;
36  print_var ();
37  printf ("We see var = %d\n\n", var);
38
39  print_foo ();
40  printf ("We see foo = %d\n", foo);
41  printf ("Setting foo = 19\n");
42  foo = 19;
43  print_foo ();
44  printf ("We see foo = %d\n\n", foo);
45  fflush (stdout);
46
47  printf ("Calling dllimported function pointer\n");
48  func_ptr ();
49
50  printf ("Calling functions using global structure\n");
51  xyz.func_ptr ();
52  * xyz.var = 40;
53  xyz.func_ptr ();
54
55  printf ("We see var2[0] = %d\n\n", var2[0]);
56
57  printf ("We see const xyz %x %x\n", const_xyz.var, const_xyz.var_with_offset);
58
59  return 0;
60}
61