diff options
Diffstat (limited to 'code/tools/lcc/tst/fields.c')
-rw-r--r-- | code/tools/lcc/tst/fields.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/code/tools/lcc/tst/fields.c b/code/tools/lcc/tst/fields.c new file mode 100644 index 0000000..242a53b --- /dev/null +++ b/code/tools/lcc/tst/fields.c @@ -0,0 +1,34 @@ +struct foo { + int a; + char b; + int x : 12, y : 4, : 0, : 4, z : 3; + char c; +} x = { 1, 2, 3, 4, 5, 6 }; +int i = 16; +struct baz { unsigned int a:2, b:4, c:32;} y = { 7, 8, 9}; + +main() +{ + printf("x = %d %d %d %d %d %d\n", x.a, x.b, x.x, x.y, x.z, x.c); + printf("y = %d %d %d\n", y.a, y.b, y.c); + x.y = i; + x.z = 070; + printf("x = %d %d %d %d %d %d\n", x.a, x.b, x.x, x.y, x.z, x.c); + y.a = 2; + y.c = i; + printf("y = %d %d %d\n", y.a, y.b, y.c); + f2(&x); + return 0; +} + +f1(struct baz *p) { + p->a = p->b = 0; + if (p->b) + printf("p->b != 0!\n"); + p->a = 0x3; p->b = 0xf; + printf("p->a = 0x%x, p->b = 0x%x\n", p->a, p->b); +} +f2(struct baz *p) { + p->a = (i==0); + p->b = (f1(p),0); +} |