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
: void
char
short
int
long
float
double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-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)