# De Objective Caml para C e C++/Os tipos básicos
### Introdução

O sistema de tipos de uma linguagem de programação é composta por:
* Tipos básicos, que são os elementos de base para representar informações mais simples e construir tipos mais complexos
* Construtores de tipos, que tem como papel combinar tipos mais elementares para construir tipos mais complexos;
* Regras de conversão entre tipos, que definem se e como valores de um tipo podem ser convertidos para um outro tipo.
O sistema de tipos também possui os construtores de tipos, que são apresentados em um módulo específico sobre . Ainda possui regras que definem quando, e como valores de um tipo podem ser convertidos entre se.
Os tipos básicos de C e de C++ são apresentados nesse módulo. Primeiro lembramos os tipos básicos de Objective Caml são unit, bool, char, int, float e string. Os tipos básicos de C++ são:
* void: o tipo vazio,
* bool: o tipo booleano,
* int: o tipo inteiro,
* char: o tipo dos caracteres,
* float e double são tipos para os números decimais.
A seguinte tabela provê uma correspondência entre os tipos básicos de C e C++ e os de Objective Caml.
| Objective Caml | C e C++ |
| - | void |
| unit | - |
| char | char |
| int | short int, long int, long long int |
| float | float, double, long double |
| string | - (*) |
(*) As linguagens C e C++ possuem construções para representar textos (string), mas essas não fazem parte conjunto dos tipos básicos. A biblioteca padrão da linguagem C fornece funções de tratamento de textos utilizando uma técnica baseada em ponteiros para caracteres. Essas funções são disponíveis na linguagem C++ que ainda fornece, através de sua biblioteca padrão, um tipo nomeado string e funções que manipulam valores desse tipo.

### O tipo vazio

Em Objective Caml, o tipo unit é o tipo das computações seqüênciais e possui apenas um valor, denotado. Em C e C++, existe um tipo similar, embora mais simples ainda! Trata-se do tipo void, que não possui valor algum. Ele é usado para definir funções que não retornam resultado.

### Booleanos

A linguagem C++ possui um tipo para representar os booleanos. Tem como nome bool e os valores true e false, representando respectivamente verdadeiro e falso.
Os operadores booleanos são:
* negação: !,
* conjunção: &&,
* disjunção: ||.
É importante notar que os operadores booleanos binários possuem uma ordem pré-definida para a avaliação de seus operandos.
* A avaliação da expressão c1 && c2 começa pela avaliação da sub-expressão c1. Se a mesma for igual ao valor false, a avaliação da expressão completa é terminada e resulta no valor false. Caso contrário, a segunda sub-expressão c2, é avaliada e o resultado sera o da expressão completa.
* Similarmente, na avaliação de uma disjunção c1 || c2, caso a avaliação da sub-expressão resulte no valor true, então é concluída a avaliação da expressão completa, resultando no valor true. Caso contrário, o valor da expressão completa é o da sub-expressão c2.
Existe um quarto operador, que pode ser chamado operador condicional. É similar à construção if...then...else de Objective Caml. A sintaxe é ... ? ... : ..., onde cada ... representa um argumento. Possui três argumentos, sendo que o primeiro é uma condição e os dois últimos devem ter tipos compatíveis. O valor da expressão é o valor do segundo argumento se a condição for verdadeira, do terceiro argumento caso contrário. Considere, como exemplo, a seguinte expressão:
O valor dessa expressão será $1$ caso o valor de i for maior ou igual a zero, e $-1$ caso contrário (>= é o operador maior ou igual).
No caso do operador condicional, o segundo argumento é avaliado apenas se o resultado da avaliação do primeiro for true, enquanto que o terceiro argumento será avaliado apenas quando o resultado da avaliação do primeiro for false.

#### Booleanos na linguagem C

Na versão inicial da linguagem C, não existia tipo para os booleanos. Em C, as condições possuem o tipo inteiro, onde a condição falso é representada pelo valor 0, e a condição verdadeiro por qualquer valor não nulo. A biblioteca padrão da linguagem C, versão 1999, existe uma definição para o tipo booleano que é idêntica à da linguagem C++. Para ter acesso a essa definição, o programador deve incluir um arquivo utilizando o comando seguinte no início do arquivo:

#### Impressão de valores booleanos

Para imprimir um valor do tipo booleano, pode-se utilizar a função printf e o operador <<. Em impressão no estilo C, temos então:
Um programa de impressão de valores booleanos no estilo C++ seria:
A execução de ambos programas resultará na seguinte impressão na saída padrão:

### Caracteres

As linguagens C e C++ possuem ambas um mesmo tipo para representar caracteres: trata-se do tipo denominado char. Os valores desse tipo podem ser denotados colocando o caractere entre aspas simples. Nesse aspecto Objective Caml é muito similar, pois adota exatamente as mesmas convenções.
A linha seguinte possui alguns valores do tipo char:
Esses valores representam, respectivamente, a letra a minúsculo, a letra a maiúsculo, o algarismo zero, o caractere especial de quebra de linha (caracteres especiais são precedidos de uma contra-barra), o caractere de contra-barra, e o caractere cujo código ASCII é 42 (o caractere de aspa dupla).
Na verdade, as linguagens C e C++ tratam o tipo char como um tipo inteiro, onde oito bits são representados para representar os valores. São portanto 256 valores diferentes. Existem duas variações:
* signed char, correspondendo aos números de -128 até 127;
* unsigned char, correspondendo aos números de 0 até 255.