1 | #include <stdbool.h> |
---|---|
2 | #include <stdio.h> |
3 | |
4 | struct ForwardDecl; |
5 | |
6 | typedef int MyInt; |
7 | |
8 | void populate(MyInt i); |
9 | |
10 | typedef enum MyEnum { |
11 | eOne = 1, |
12 | eTwo =2, |
13 | eThree = 3, |
14 | } MyEnumT; |
15 | |
16 | typedef union MyUnion { |
17 | MyInt i; |
18 | const char* s; |
19 | } MyUnionT; |
20 | |
21 | typedef struct MyNestedStruct { |
22 | MyInt i; |
23 | const char* s; |
24 | volatile char c; |
25 | char a[4]; |
26 | MyEnumT e; |
27 | MyUnionT u; |
28 | _Bool b; |
29 | } MyNestedStructT; |
30 | |
31 | typedef struct MyStruct { |
32 | MyNestedStructT n; |
33 | void (*f)(int); |
34 | } MyStructT; |
35 | |
36 | struct LargeStruct { |
37 | char buffer[9000]; |
38 | int b; |
39 | }; |
40 | |
41 | struct RecursiveStruct { |
42 | struct RecursiveStruct *n; |
43 | }; |
44 | |
45 | MyStructT foo; |
46 | struct ForwardDecl *forward; |
47 | struct LargeStruct bar; |
48 | struct RecursiveStruct ke; |
49 | |
50 | void populate(MyInt i) { |
51 | foo.n.i = i; |
52 | foo.n.s = "foo"; |
53 | foo.n.c = 'c'; |
54 | foo.n.a[0] = 'a'; |
55 | foo.n.a[1] = 'b'; |
56 | foo.n.a[2] = 'c'; |
57 | foo.n.a[3] = 'd'; |
58 | foo.n.e = eOne; |
59 | foo.n.b = false; |
60 | foo.f = NULL; |
61 | forward = NULL; |
62 | bar.b = i; |
63 | ke.n = NULL; |
64 | } |
65 | |
66 | int main(int argc, char** argv) { |
67 | populate(i: argc); |
68 | printf(format: "foo is at address: %p\n", (void*)&foo); // Break here |
69 | return 0; |
70 | } |
71 |