Skip to content
Snippets Groups Projects
Select Git revision
  • 0ba264323975d1dc4dd71499afc9d06ee4ce3d5e
  • master default
2 results

loesung-2e.c

Blame
  • Forked from Peter Gerwinski / hp
    328 commits behind the upstream repository.
    loesung-2e.c 925 B
    #include <stdio.h>
    
    #define ANIMAL     0
    #define WITH_WINGS 1
    #define WITH_LEGS  2
    
    typedef struct
    {
      int type;
      char *name;
    } base;
    
    typedef struct
    {
      int type;
      char *name;
      int wings;
    } with_wings;
    
    typedef struct
    {
      int type;
      char *name;
      int legs;
    } with_legs;
    
    typedef union
    {
      base b;
      with_wings w;
      with_legs l;
    } animal;
    
    int main (void)
    {
      animal *a[2];
    
      animal duck;
      a[0] = &duck;
      duck.b.type = WITH_WINGS;
      duck.b.name = "duck";
      duck.w.wings = 2;
    
      animal cow;
      a[1] = &cow;
      cow.b.type = WITH_LEGS;
      cow.b.name = "cow";
      cow.l.legs = 4;
    
      for (int i = 0; i < 2; i++)
        if (a[i]->b.type == WITH_LEGS)
          printf ("A %s has %d legs.\n", a[i]->b.name,
                  a[i]->l.legs);
        else if (a[i]->b.type == WITH_WINGS)
          printf ("A %s has %d wings.\n", a[i]->b.name,
                  a[i]->w.wings);
        else
          printf ("Error in animal: %s\n", a[i]->b.name);
    
      return 0;
    }