Um tipo-de-dados (= data type) é um conjunto de valores munido de um conjunto de operações. Algumas operações transformam valores em outros valores. Outras, associam números a valores ou conjuntos de valores. Eis alguns tipos-de-dados básicos da linguagem C:
INT_MIN, . . . , −2, −1, 0, 1, 2, . . . , INT_MAX
Os valores das constantes INT_MIN e INT_MAX estão registrados no arquivo-interface limits.h do seu computador.
Entre as operações sobre esses valores destacam-se as de comparação ( <, <=, ==, >, >= ) e as aritméticas ( +, -, *, / ). Cada operação aritmética recebe dois ints e devolve um int como resultado. O efeito de uma operação aritmética é às vezes diferente do pregado pela matemática: há overflow em alguns casos e truncamento em outros. Por exemplo, 9 / 2 vale 4 (e não 4.5). Outro exemplo: se o conjunto de valores é o intervalo [−32768,+32767] então 32767 + 1 vale −32768 e não 32768.
−128, −127, . . . , +126, +127
As operações usuais sobre esses valores são indicadas por <, <=, ==, >, >=, + e -. Em uma implementação ideal do conceito de tipo-de-dados, o valor da expressão 127 + 2 deveria ser −127 e não 129. Na linguagem C, entretanto, o valor da expressão x + y abaixo é 129, pois a expressão é calculada em aritmética inteira.
char x, y, z; x = 127; y = 2; z = x + y;
(Mas o valor de z é -127.)
0, 1, . . . , 254, 255
Você pode definir os seus próprios tipos-de-dados recorrendo ao typedef. Por exemplo, o tipo-de-dados bool (= boolean) é muito útil e muito usado:
typedef enum {FALSE, TRUE} bool;
Outro tipo-de-dados muito usado é
string (= cadeia-de-caracteres):
typedef char *string;
Um exemplo mais especializado: o tipo-de-dados ponto_no_plano tem como conjunto de valores todos os pares de doubles:
typedef struct {
double x;
double y;
} ponto_no_plano;
O conjunto de operações sobre esses valores é derivado do conjunto de operações sobre doubles. Você pode acrescentar suas próprias operações: por exemplo, a operação distância produz a distância euclideana entre dois ponto_no_plano.