www.digitalmars.com
Last update Wed May 31 17:11:57 2006

Estruturas e Uniões

AggregateDeclaration:
Tag { DeclDefs }
Tag Identifier StructBody
Tag Identifier ;
Tag:
struct
union
StructBody:
{ }
{ StructBodyDeclarations }
StructBodyDeclarations:
StructBodyDeclaration
StructBodyDeclaration StructBodyDeclarations
StructBodyDeclaration:
Declaration
Invariant
UnitTest
StructAllocator
StructDeallocator
StructAllocator:
ClassAllocator
StructDeallocator:
ClassDeallocator
Elas trabalham como fazem em C, com as seguintes exceções: Estruturas e uniões são entendidos como simples agregações de dados, ou como um modo de pintar uma estrutura de dados sobre hardware ou um tipo externo. Tipos externos podem ser definidos pela API do sistema operacional, ou por um formato de arquivo. Características orientadas a objeto são providas com o tipo de dado da classe.

Inicialização Estática de Estruturas

Membros estáticos de estruturas são por padrão inicializados para o que quer que o inicializador padrão para o membro seja, e se nenhum é fornecido, para o inicializador padrão para o tipo do membro. Se um inicializador estático é fornecido, os membros são inicializados pelo nome do membro, dois pontos, sintaxe da expressão. Os membros podem ser inicializados em qualquer ordem. Membros não especificados na lista do inicializador são por inicializados de forma padrão.
struct X { int a; int b; int c; int d = 7;}
static X x = { a:1, b:2}; // c é ajustado para 0, d para 7
static X z = { c:4, b:5, a:2 , d:5}; // z.a = 2, z.b = 5, z.c = 4, z.d = 5
Inicialização estilo C, baseada na ordem dos membros na declaração da estrutura, também é suportada:
static X q = { 1, 2 }; // q.a = 1, q.b = 2, q.c = 0, q.d = 7

Inicialização Estática de Uniões

Uniões são inicializadas explicitamente.
union U { int a; double b; }
static U u = { b : 5.0 }; // u.b = 5.0
Outros membros da união que cobrem o inicializador, mas acupam mais armazenamento, tem o armazenamento extra inicializado para zero.

Propriedades de Estruturas

.sizeof Tamanho da estrutura em bytes
.alignof Tamanho limite que a estrutura precisa para ser alinhada

Propriedades de Campos de Estruturas

.offsetof Deslocamento em bytes do campo a partir do começo
da estrutura