1 #include <stdio.h>
2 
3 typedef char padding[16];
4 
5 struct {
6   padding p1;
7   char v;
8   padding p2;
9 } padding_char;
10 
11 struct {
12   padding p1;
13   short v;
14   padding p2;
15 } padding_short;
16 
17 struct {
18   padding p1;
19   int v;
20   padding p2;
21 } padding_int;
22 
23 struct {
24   padding p1;
25   long v;
26   padding p2;
27 } padding_long;
28 
29 struct {
30   padding p1;
31   long long v;
32   padding p2;
33 } padding_long_long;
34 
35 struct {
36   padding p1;
37   float v;
38   padding p2;
39 } padding_float;
40 
41 struct {
42   padding p1;
43   double v;
44   padding p2;
45 } padding_double;
46 
47 struct {
48   padding p1;
49   long double v;
50   padding p2;
51 } padding_long_double;
52 
53 static void
fill(void * buf,long sizeof_buf)54 fill (void *buf, long sizeof_buf)
55 {
56   char *p = buf;
57   int i;
58   for (i = 0; i < sizeof_buf; i++)
59     p[i] = "The quick brown dingo jumped over the layzy dog."[i];
60 }
61 
62 void
fill_structs(void)63 fill_structs (void)
64 {
65   fill (&padding_char.p1, sizeof (padding));
66   fill (&padding_char.v, sizeof (padding_char.v));
67   fill (&padding_char.p2, sizeof (padding));
68 
69   fill (&padding_short.p1, sizeof (padding));
70   fill (&padding_short.v, sizeof (padding_short.v));
71   fill (&padding_short.p2, sizeof (padding));
72 
73   fill (&padding_int.p1, sizeof (padding));
74   fill (&padding_int.v, sizeof (padding_int.v));
75   fill (&padding_int.p2, sizeof (padding));
76 
77   fill (&padding_long.p1, sizeof (padding));
78   fill (&padding_long.v, sizeof (padding_long.v));
79   fill (&padding_long.p2, sizeof (padding));
80 
81   fill (&padding_long_long.p1, sizeof (padding));
82   fill (&padding_long_long.v, sizeof (padding_long_long.v));
83   fill (&padding_long_long.p2, sizeof (padding));
84 
85   fill (&padding_float.p1, sizeof (padding));
86   fill (&padding_float.v, sizeof (padding_float.v));
87   fill (&padding_float.p2, sizeof (padding));
88 
89   fill (&padding_double.p1, sizeof (padding));
90   fill (&padding_double.v, sizeof (padding_double.v));
91   fill (&padding_double.p2, sizeof (padding));
92 
93   fill (&padding_long_double.p1, sizeof (padding));
94   fill (&padding_long_double.v, sizeof (padding_long_double.v));
95   fill (&padding_long_double.p2, sizeof (padding));
96 }
97 
98 int
main()99 main ()
100 {
101   fill_structs ();
102 
103   printf ("sizeof (char) == %d\n", (int) sizeof (char));
104   printf ("sizeof (short) == %d\n", (int) sizeof (short));
105   printf ("sizeof (int) == %d\n", (int) sizeof (int));
106   printf ("sizeof (long) == %d\n", (int) sizeof (long));
107   printf ("sizeof (long long) == %d\n", (int) sizeof (long long));
108 
109   printf ("sizeof (void *) == %d\n", (int) sizeof (void*));
110   printf ("sizeof (void (*)(void)) == %d\n", (int) sizeof (void (*)(void)));
111 
112   printf ("sizeof (float) == %d\n", (int) sizeof (float));
113   printf ("sizeof (double) == %d\n", (int) sizeof (double));
114   printf ("sizeof (long double) == %d\n", (int) sizeof (long double));
115 
116   /* Signed char?  */
117   printf ("valueof ('\\377') == %d\n", '\377');
118   printf ("valueof ((int) (char) -1) == %d\n", (int) (char) -1);
119   printf ("valueof ((int) (signed char) -1) == %d\n", (int) (signed char) -1);
120   printf ("valueof ((int) (unsigned char) -1) == %d\n", (int) (unsigned char) -1);
121 
122   return 0;
123 }
124