diff options
Diffstat (limited to 'gdb/teststruct.c')
-rw-r--r-- | gdb/teststruct.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/gdb/teststruct.c b/gdb/teststruct.c new file mode 100644 index 0000000..75f1642 --- /dev/null +++ b/gdb/teststruct.c @@ -0,0 +1,111 @@ +struct small +{ + int i; +}; + +struct med +{ + struct small s1, s2; +}; + +struct large +{ + struct med m1, m2; +}; + +struct xlarge +{ + struct large l1, l2; +}; + +struct small ret_small (); +struct med ret_med (); +struct large ret_large (); +struct xlarge ret_xlarge (); + +void print_small (); +void print_med (); +void print_large (); +void print_xlarge (); + +main () +{ + struct small s; + struct med m; + struct large l; + struct xlarge x; + + s = ret_small (1); + m = ret_med (s,s); + l = ret_large (m, m); + x = ret_xlarge (l, l); + + print_small (s); + print_med (m); + print_large (l); + print_xlarge (x); +} + +struct small ret_small (i) + int i; +{ + struct small s; + s.i = i; + return s; +} + +struct med ret_med (s1, s2) + struct small s1, s2; +{ + struct med m; + m.s1 = s1; + m.s2 = s2; + return m; +} + +struct large ret_large (m1, m2) + struct med m1, m2; +{ + struct large l; + l.m1 = m1; + l.m2 = m2; + return l; +} + +struct xlarge ret_xlarge (l1, l2) + struct large l1, l2; +{ + struct xlarge x; + x.l1 = l1; + x.l2 = l2; + return x; +} + +void print_small (s) + struct small s; +{ + printf ("small: s.i = %d\n", s.i); +} + +void print_med (m) + struct med m; +{ + printf ("med: m.s1.i = %d; m.s2.i = %d\n", m.s1.i, m.s2.i); +} + +void print_large (l) + struct large l; +{ + printf ("large: l.m1.s1.i = %d; l.m1.s2.i = %d; l.m2.s1.i = %d; l.m2.s2.i = %d\n", + l.m1.s1.i, l.m1.s2.i, l.m2.s1.i, l.m2.s2.i); +} + +void print_xlarge (x) + struct xlarge x; +{ + printf ("xlarge: x.l1: "); + print_large (x.l1); + printf ("xlarge: x.l2: "); + print_large (x.l2); +} + |