De Objective Caml para C e C++/Construção de tipos: diferenças entre revisões

 
===Tipos enumerados===
 
Um tipo enumerado contem um número finito de valores. Cada valor tem um nome que o identifica. Por exemplo a seguinte definição:
enum Ecor {vermelho, azul, amarelo};
introduz um tipo enumerado, que possui como ''rótulo'' <tt>Ecor</tt>, e três ''enumeradores'', que são valores inteiros constantes com identificadores <tt>vermelho</tt>, <tt>azul</tt>, <tt>amarelo</tt>.
 
Em seguida, podemos declarar e utilizar variáveis com esse tipo, e os valores que foram introduzidos na operação podem também aparecer no programa, onde serão consideradas como valores inteiros.
Segue um trecho de programa que utiliza a definição acima:
void imprime_cor_em_ingles (enum Ecor c)
{
switch (c1) {
case vermelho:
printf("red");
break;
case azul:
printf("blue");
break;
case vermelho:
printf("amarelo");
break;
}
}
Afirmamos que um valor inteiro é associado a cada valor de uma enumeração. Podemos realizar essa associação de forma ''implícita'' ou ''explícita''. A forma explícita é realizada associando o número inteiro na definição da enumeração, como demostrado no seguinte exemplo:
enum Edirecao { norte = 0; oeste = 90; sul = 180; leste = 270 };
Caso não aparece associação explícita, a associação é realizada de maneira implícita, utilizando as seguintes regras: o primeiro valor da enumeração recebe o valor zero, e um valor que não está na primeira posição é associado com a soma de um com o inteiro associado ao valor anterior.
 
Finalmente, podemos também misturar as associações explícitas e implícitas, como no seguinte exemplo:
enum Ecodigo { NO_ERROR = 0; IO_ERROR = 10; FORMAT_ERROR; TIMEOUT_ERROR };
Nesse exemplo, <tt>FORMAT_ERROR</tt> e <tt>TIMEOUT_ERROR</tt> denotam respectivamente os inteiros <math>10</math> e <math>11</math>.
 
Com relação ao sistema de tipos de Objective Caml, os tipos enumerados podem ser relacionados com tipos variantes onde as alternativas devem ser todas constantes.
 
===Tipos arranjos===
187

edições