20 de ago. de 2012

typedef union pessoa;

Me perguntaram no twitter por que eu defini pessoa usando union e não struct, como é comum se fazer declaração em C. Bom, a declaração em questão é a seguinte:

typedef union humano {
  int razao;
  int emocao;
  int fe;
} pessoa;

Então, vamos aos detalhes técnicos. Em C, quando você declara algo como struct, você está criando uma estrutura onde todos os elementos lá dentro fazem parte de algo maior que engloba todos os elementos. Ou seja, você pode acessar qualquer membro da estrutura individualmente.

No entanto, quando você declara algo como union, você está criando uma estrutura onde todos os elementos na verdade usam o mesmo espaço de memória, ou seja, você nunca poderá usar mais de um dos elementos declarados ao mesmo tempo, pois ao usar um deles, o elemento usado ocupará toda a memória disponível.

Daí você se pergunta: "Mas o que isso têm a ver com a declaração acima?" É simples, e todas a maioria das pessoas seguem esse roteiro:

Se você usa a razão, a emoção e a fé são coisas irracionais;
Se você usa a emoção, a razão é fria e a fé cega;
Se você usa a fé, a razão é louca e a emoção manipulável.

Assim explico o motivo de usar union e não struct. Beijos e se não gostou, vai carpir um terreno que esse ódio passa.