Especificadores de tipo C

Os especificadores de tipo em declarações definem o tipo de uma declaração de função ou variável.

Sintaxe

type-specifier: voidcharshortintlongfloatdoublesignedunsignedstruct-or-union-specifierenum-specifiertypedef-name

Os tipos signed char, signed int, signed short int e signed long int, junto de suas unsigned contrapartes e enum, são chamados de tipos integrais. Os especificadores de tipo float, double e long double são chamados de flutuantes ou de tipos de ponto flutuante. Você pode usar qualquer especificador do tipo integral ou de ponto flutuante em uma declaração de variável ou função. Antes, quando um type-specifier não era fornecido em uma declaração, ela era considerada int. O compilador da Microsoft não aceita mais declarações int padrão.

As palavras-chave opcionais signed e unsigned podem preceder ou seguir qualquer um dos tipos integrais, exceto enum, e também podem ser usadas sozinhas como especificadores de tipo e, nesse caso, são interpretadas como signed int e unsigned int, respectivamente. Quando usada sozinha, a palavra-chave int é considerada como signed. Quando usadas isoladamente, as palavras-chave long e short são entendidas como long int e short int.

Os tipos de enumeração são considerados tipos básicos. Os especificadores de tipo para tipos de enumeração são discutidos em Declarações de enumeração.

A palavra-chave void tem três usos: especificar um tipo de retorno da função, especificar uma lista de tipo de argumento para uma função que não leve argumentos e especificar um ponteiro para um tipo não especificado. Você pode usar o tipo de void para declarar as funções que não retornam nenhum valor ou para declarar um ponteiro para um tipo não especificado. Consulte Argumentos para obter informações sobre void quando é exibido sozinho dentro dos parênteses depois de um nome de função.

Seção específica da Microsoft

A verificação de tipo agora está em conformidade com ANSI, o que significa que o tipo short e o tipo int são tipos distintos. Este exemplo mostra uma redefinição no compilador do C da Microsoft que foi aceita por versões anteriores do compilador.

int   myfunc();
short myfunc();

O exemplo a seguir também gerencia um aviso sobre a ação indireta a diferentes tipos:

int *pi;
short *ps;

ps = pi;  /* Now generates warning */

O compilador do Microsoft C também gerencia avisos para as diferenças no sinal. Por exemplo:

signed int *pi;
unsigned int *pu;

pi = pu;  /* Now generates warning */

As expressões do tipo void são avaliadas quanto a efeitos colaterais. Você não pode usar o valor (inexistente) de uma expressão que tenha o tipo void de nenhuma forma, nem converter uma expressão de void (por conversão implícita ou explícita) em nenhum tipo, exceto void. Se você usar uma expressão de qualquer outro tipo em um contexto onde a expressão void é necessária, seu valor será descartado.

Para estar em conformidade com a especificação ANSI, void** não pode ser usado como int**. Somente void* pode ser usado como um ponteiro para um tipo não especificado.

Fim da seção específica da Microsoft

Você pode criar mais especificadores de tipo com declarações typedef, conforme a descrição em Declarações typedef. Consulte Armazenamento de tipos básicos para obter informações sobre o tamanho de cada tipo.

Confira também

Declarações e tipos
typeof, __typeof__ (C23)
typeof_unqual, __typeof_unqual__ (C23)