177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// struct definition and declaration 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct a { 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int a; 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int b; 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} c; 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// Useful anonymous struct declaration 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct { 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao int y; 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} anon1, anon2; 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// forward declarations 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct a; 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct b; 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct c; 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct b {int a; int b; }; 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// struct c {b g; }; // syntax error. 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// struct s {float c,a,b,c;} s; // duplicate struct member 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct c {struct b g; }; 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao// struct a { int w; }; // error 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid testCopying() { 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct a {int a[10]; char c;} a, b; 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao a.c = 37; 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao b.c = 38; 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao b = a; 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("testCopying: %d == %d\n", a.c, b.c); 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid testUnion() { 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao union u; 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao union u {float f;int i;} u; 3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao u.f = 1.0f; 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("testUnion: %g == 0x%08x\n", u.f, u.i); 4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaostruct v {float x, y, z, w; }; 4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid add(struct v* result, struct v* a, struct v* b) { 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao result->x = a->x + b->x; 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao result->y = a->y + b->y; 4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao result->z = a->z + b->z; 4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao result->w = a->w + b->w; 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid set(struct v* v, float x, float y, float z, float w) { 5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao v->x = x; 5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao v->y = y; 5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao v->z = z; 5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao v->w = w; 5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid print(struct v* v) { 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("(%g, %g, %g, %g)\n", v->x, v->y, v->z, v->w); 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaovoid testArgs() { 6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct v a, b, c; 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao set(&a, 1.0f, 2.0f, 3.0f, 4.0f); 6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao set(&b, 5.0f, 6.0f, 7.0f, 8.0f); 6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao add(&c, &a, &b); 6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao printf("testArgs: "); 6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao print(&c); 6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoint main() { 7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao anon1.y = 3; 7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao anon2.y = anon1.y; 7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao testCopying(); 7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao testUnion(); 7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao testArgs(); 7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct c cc; 8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao cc.g.a = 3; 8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao c.a = 1; 8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao c.b = 3; 8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct a {int x, y; } z; 8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao // struct a {int x, y; } z2; 8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao z.x = c.a; 8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao struct a *pA; 8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao pA = &z; 8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao pA->x += 5; 8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao return pA->x; 9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao} 91