#include <stdio.h>

typedef char padding[16];

struct {
  padding p1;
  char v;
  padding p2;
} padding_char;

struct {
  padding p1;
  short v;
  padding p2;
} padding_short;

struct {
  padding p1;
  int v;
  padding p2;
} padding_int;

struct {
  padding p1;
  long v;
  padding p2;
} padding_long;

struct {
  padding p1;
  long long v;
  padding p2;
} padding_long_long;

struct {
  padding p1;
  float v;
  padding p2;
} padding_float;

struct {
  padding p1;
  double v;
  padding p2;
} padding_double;

struct {
  padding p1;
  long double v;
  padding p2;
} padding_long_double;

static void
fill (void *buf, long sizeof_buf)
{
  char *p = buf;
  int i;
  for (i = 0; i < sizeof_buf; i++)
    p[i] = "The quick brown dingo jumped over the layzy dog."[i];
}

void
fill_structs (void)
{
  fill (&padding_char.p1, sizeof (padding));
  fill (&padding_char.v, sizeof (padding_char.v));
  fill (&padding_char.p2, sizeof (padding));

  fill (&padding_short.p1, sizeof (padding));
  fill (&padding_short.v, sizeof (padding_short.v));
  fill (&padding_short.p2, sizeof (padding));

  fill (&padding_int.p1, sizeof (padding));
  fill (&padding_int.v, sizeof (padding_int.v));
  fill (&padding_int.p2, sizeof (padding));

  fill (&padding_long.p1, sizeof (padding));
  fill (&padding_long.v, sizeof (padding_long.v));
  fill (&padding_long.p2, sizeof (padding));

  fill (&padding_long_long.p1, sizeof (padding));
  fill (&padding_long_long.v, sizeof (padding_long_long.v));
  fill (&padding_long_long.p2, sizeof (padding));

  fill (&padding_float.p1, sizeof (padding));
  fill (&padding_float.v, sizeof (padding_float.v));
  fill (&padding_float.p2, sizeof (padding));

  fill (&padding_double.p1, sizeof (padding));
  fill (&padding_double.v, sizeof (padding_double.v));
  fill (&padding_double.p2, sizeof (padding));

  fill (&padding_long_double.p1, sizeof (padding));
  fill (&padding_long_double.v, sizeof (padding_long_double.v));
  fill (&padding_long_double.p2, sizeof (padding));
}

int
main ()
{
  fill_structs ();

  printf ("sizeof (char) == %d\n", (int) sizeof (char));
  printf ("sizeof (short) == %d\n", (int) sizeof (short));
  printf ("sizeof (int) == %d\n", (int) sizeof (int));
  printf ("sizeof (long) == %d\n", (int) sizeof (long));
  printf ("sizeof (long long) == %d\n", (int) sizeof (long long));

  printf ("sizeof (void *) == %d\n", (int) sizeof (void*));
  printf ("sizeof (void (*)(void)) == %d\n", (int) sizeof (void (*)(void)));

  printf ("sizeof (float) == %d\n", (int) sizeof (float));
  printf ("sizeof (double) == %d\n", (int) sizeof (double));
  printf ("sizeof (long double) == %d\n", (int) sizeof (long double));

  /* Signed char?  */
  printf ("valueof ('\\377') == %d\n", '\377');
  printf ("valueof ((int) (char) -1) == %d\n", (int) (char) -1);
  printf ("valueof ((int) (signed char) -1) == %d\n", (int) (signed char) -1);
  printf ("valueof ((int) (unsigned char) -1) == %d\n", (int) (unsigned char) -1);

  return 0;
}
