====== Tipos de dados ====== Em C, as variáveis são estaticamente tipadas, ou seja, têm seu tipo pré-definido no código. Em princípio o tipo de uma variável não pode ser mudado (embora isso possa ser contornado através de operações especiais como o //type casting//). Os principais tipos de dados em C são: * Tipos escalares * Tipos aritméticos * Inteiros * Reais * Complexos (C99) * [[Ponteiros]] * Tipos não-escalares * Arranjos ([[vetores|vetores e matrizes]]) * [[Estruturas]] * [[Uniões]] ===== Tipos inteiros ===== Os tipos inteiros básicos no padrão C99 em máquinas de 32 bits e 64 bits são: ^ Tipo ^ Tamanho (32 bits) ^ Faixa (32 bits) ^ Tamanho (64 bits) ^ Faixa (64 bits) ^ | ''char'' | 1 byte | -128 a +127 ou\\ 0 a 255 | idem | idem | | ''unsigned char'' | 1 byte | 0 a 255 | idem | idem | | ''signed char'' | 1 byte | -128 a +127 | idem | idem | | ''short'' (ou ''signed short'') | 2 bytes | -32.768 a +32.767 | idem | idem | | ''unsigned short'' | 2 bytes | 0 a 65.535 | idem | idem | | ''int'' (ou ''signed int'') | 4 bytes | -231 a +231 - 1 | idem | idem | | ''unsigned int'' | 4 bytes | 0 a 232 - 1 | idem | idem | | ''long'' (ou ''signed long'') | 4 bytes | -231 a +231 - 1 | 8 bytes | -263 a +263 - 1 | | ''unsigned long'' | 4 bytes | 0 a 232 - 1 | 8 bytes | 0 ... 264 - 1 | | ''long long'' (ou ''signed long long'') | 8 bytes | -263 a +263 - 1 | idem | idem | | ''unsigned long long'' | 8 bytes | 0 a 264 - 1 | idem | idem | | ''*'' e ''&'' (endereços) | 4 bytes | - | 8 bytes | - | O arquivo ''limits.h'' define constantes para os limites de valores aceitos dos tipos inteiros, como ''INT_MIN'', ''LONG_MAX'', etc. No Linux, esse arquivo se encontra em ''/usr/include/limits.h''. Como alguns tipos inteiros básicos dependem da implementação do compilador ou da plataforma de execução (16, 32 ou 64 bits), o padrão C99 trouxe definições de tipos inteiros **de tamanho fixo** (encontradas no arquivo ''inttypes.h''), como ''int8_t'' (inteiro de 8 bits com sinal), ''uint32_t'' (inteiro de 32 bits sem sinal), etc. Mais informações sobre tipos de dados em C podem ser encontradas [[https://en.wikipedia.org/wiki/C_data_types|nesta página]]. ===== Tipos reais ===== Os tipos reais (de ponto flutuante) básicos são: ^ Tipo ^ Tamanho (bytes) ^ Faixa de valores ^ Precisão ^ | ''float'' | 4 bytes | ±1.2×10-38 a ±3.4×10+38 | 6 dígitos | | ''double'' | 8 bytes | ±2.3×10-308 a ±1.7×10+308 | 15 dígitos | | ''long double'' | 10 bytes | ±3.4×10-4932 a ±1.1×10+4932 | 19 dígitos | ===== Tipo booleano ===== A especificação C ANSI original **não possui** um tipo booleano. Em seu lugar, toda variável ou expressão cujo resultado seja zero (ou nulo) é avaliada como FALSA; caso o resultado seja diferente de zero (ou não-nulo), a variável ou expressão é considerada VERDADEIRA (inclusive valores negativos). A especificação C99 trouxe um tipo booleano (''bool''), acessível através do arquivo ''stdbool.h''. ===== O Tipo void ===== A palavra reservada ''void'' designa um valor ou variável de tipo desconhecido. Esse tipo é usado em algumas situações especiais que serão vistas posteriormente, como ponteiros para variáveis cujo tipo é desconhecido a priori ou para indicar que uma função não retorna nenhum valor válido.