Uma nota sobre os tipos “inteiros”

As linguagens C e C++ possuem alguns tipos “primitivos”, dentre eles os tipos “inteiros” ou “integrais”. São char, short int, long int e long long int. Não estranhem, alguns programadores acham que int e long são dois tipos diferentes com o mesmo tamanho, mas vou mostrar que a história não é bem essa…

Históricamente falando, a declaração completa dos tipos inteiros segue o padrão:

  [local] [escopo] [sinalização] [tamanho] tipo nome-da-variável;

Onde o que está entre colchetes é opcional que, se omitidos, “valores” são assumidos. Para o local existem as possibilidades extern e static. Para o escopo,  autovolatile. Para a sinalizaçãosigned e unsigned. Para o tamanho temos (para o tipo int) short, long e long long. Já o tipo pode ser char, int, float ou double. Indiquei alguns defaults em negrito pra você… No resto do texto vou me restringir ao tipo int.

A sinalização e o tamanho não fazem muito sentido em outros tipos que não o int, então eles só existem para esse tipo…

Assim, quando você especifica uma variável como int está, na realidade, dizendo:

  extern auto signed long int x; /* Isso é um 'int x;' */

Bem…. nem sempre… Acontece que o tamanho pode mudar de acordo com a arquitetura. Para a arquitetura x86 o compilador assume long com tamanho de 32 bits. Para arquitetura x86-64, o tamanho long é o mesmo de long long, ou seja, 64 bits. E essa é a minha nota:

Tome cuidado ao usar o tamanho long… Ele pode não ter o tamanho que vocẽ espera.

O tipo int, sem o tamanho explicitado, parece ter o tamanho fixo de 32 bits (hoje em dia), mas eu também não confiaria nisso…

Para ter certeza que o tamanho de int é o que vocẽ quer, a especificação ISO/IEC 9899 (C99), que pode ser baixada aqui, nos diz que existe um header chamado stdint.h que define os tipos int8_t, int16_t, int32_t e int64_t (bem como suas variações unsigned que tem um ‘u’ na frente: uint8_tuint16_tuint32_tuint64_t). Para ser bem sincero com vocês, até começar a escrever este artigo, eu não sabia que stdint.h definia esses tipos. Sempre os defini por minha própria conta e risco. A partir de agora vou começar a usá-lo! Valeu, galera! :)

Um comentário sobre “Uma nota sobre os tipos “inteiros”

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s