LINUX.ORG.RU

История изменений

Исправление AlexVR, (текущая версия) :

Что за фигня. Какие union из ссылок?

Внешне, должно быть +/- так:

struct animal {
  // ...
};

void animal_say(struct animal *animal);
void animal_free(struct animal *animal);

struct cat {
  struct animal base;
  // ...
};

struct animal* cat_new(/*...*/);

struct dog {
  struct animal base;
  // ...
};

struct animal* dog_new(/*...*/);

int main() {
  
  struct animal *animals[2] = { cat_new(), dog_new() };
  animal_say(animals[0]);
  animal_say(animals[1]);
  animal_free(animals[0]);
  animal_free(animals[1]);
  return 0;
}

Исходная версия AlexVR, :

Что за фигня. Какие union из ссылок?

Внешне, должно быть +/- так:

struct animal {
  // ...
};

void animal_say(struct animal *animal);
void animal_free(struct animal *animal);

struct cat {
  struct animal base;
  // ...
};

struct cat* cat_new(/*...*/);

struct dog {
  struct animal base;
  // ...
};

struct dog* dog_new(/*...*/);

int main() {
  
  struct animal *animals[2] = { cat_new(), dog_new() };
  animal_say(animals[0]);
  animal_say(animals[1]);
  animal_free(animals[0]);
  animal_free(animals[1]);
  return 0;
}