home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / emx / test / pack.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-12-18  |  1.2 KB  |  63 lines

  1. /* pack.c (emx+gcc) */
  2.  
  3. #include <stdio.h>
  4.  
  5. #define STRUCT struct \
  6.   { \
  7.     char a; \
  8.     unsigned short b; \
  9.     char c, d; \
  10.     long e; \
  11.     struct \
  12.       { \
  13.         short b1:5; \
  14.         short b2:5; \
  15.         short b3:6; \
  16.       } t1, t2, t3; \
  17.     long f; \
  18.   }
  19.  
  20. #pragma pack(1)
  21. STRUCT x1;
  22. #pragma pack(2)
  23. STRUCT x2;
  24. #pragma pack(4)
  25. STRUCT x4;
  26.  
  27. #define OFFSET(v,f) ((char *)&v.f - (char *)&v)
  28. #define CHECK(v,f,n) if (OFFSET (v,f) != n) \
  29.            printf ("Offset of " #f " in " #v " is %d -- should be %d\n", \
  30.                    OFFSET (v, f), n)
  31.  
  32. int main (void)
  33. {
  34.   CHECK (x4, a, 0);
  35.   CHECK (x4, b, 2);
  36.   CHECK (x4, c, 4);
  37.   CHECK (x4, d, 5);
  38.   CHECK (x4, e, 8);
  39.   CHECK (x4, t1, 12);
  40.   CHECK (x4, t2, 14);
  41.   CHECK (x4, t3, 16);
  42.   CHECK (x4, f, 20);
  43.   CHECK (x2, a, 0);
  44.   CHECK (x2, b, 2);
  45.   CHECK (x2, c, 4);
  46.   CHECK (x2, d, 5);
  47.   CHECK (x2, e, 6);
  48.   CHECK (x2, t1, 10);
  49.   CHECK (x2, t2, 12);
  50.   CHECK (x2, t3, 14);
  51.   CHECK (x2, f, 16);
  52.   CHECK (x1, a, 0);
  53.   CHECK (x1, b, 1);
  54.   CHECK (x1, c, 3);
  55.   CHECK (x1, d, 4);
  56.   CHECK (x1, e, 5);
  57.   CHECK (x1, t1, 9);
  58.   CHECK (x1, t2, 11);
  59.   CHECK (x1, t3, 13);
  60.   CHECK (x1, f, 15);
  61.   return (0);
  62. }
  63.