1 // struct definition and declaration 2 struct a { 3 int a; 4 int b; 5 } c; 6 7 // Useful anonymous struct declaration 8 struct { 9 int y; 10 } anon1, anon2; 11 12 // forward declarations 13 struct a; 14 struct b; 15 struct c; 16 17 struct b {int a; int b; }; 18 19 // struct c {b g; }; // syntax error. 20 21 // struct s {float c,a,b,c;} s; // duplicate struct member 22 23 struct c {struct b g; }; 24 25 // struct a { int w; }; // error 26 27 void testCopying() { 28 struct a {int a[10]; char c;} a, b; 29 a.c = 37; 30 b.c = 38; 31 b = a; 32 printf("testCopying: %d == %d\n", a.c, b.c); 33 } 34 35 void testUnion() { 36 union u; 37 union u {float f;int i;} u; 38 u.f = 1.0f; 39 printf("testUnion: %g == 0x%08x\n", u.f, u.i); 40 } 41 42 struct v {float x, y, z, w; }; 43 44 void add(struct v* result, struct v* a, struct v* b) { 45 result->x = a->x + b->x; 46 result->y = a->y + b->y; 47 result->z = a->z + b->z; 48 result->w = a->w + b->w; 49 } 50 51 void set(struct v* v, float x, float y, float z, float w) { 52 v->x = x; 53 v->y = y; 54 v->z = z; 55 v->w = w; 56 } 57 58 void print(struct v* v) { 59 printf("(%g, %g, %g, %g)\n", v->x, v->y, v->z, v->w); 60 } 61 62 void testArgs() { 63 struct v a, b, c; 64 set(&a, 1.0f, 2.0f, 3.0f, 4.0f); 65 set(&b, 5.0f, 6.0f, 7.0f, 8.0f); 66 add(&c, &a, &b); 67 printf("testArgs: "); 68 print(&c); 69 } 70 71 int main() { 72 anon1.y = 3; 73 anon2.y = anon1.y; 74 75 testCopying(); 76 testUnion(); 77 testArgs(); 78 79 struct c cc; 80 cc.g.a = 3; 81 c.a = 1; 82 c.b = 3; 83 struct a {int x, y; } z; 84 // struct a {int x, y; } z2; 85 z.x = c.a; 86 struct a *pA; 87 pA = &z; 88 pA->x += 5; 89 return pA->x; 90 } 91