No mundo C ++ (ou C) de plataforma cruzada de hoje, temos :
Data model | short | int | long | long long | pointers/size_t | Sample operating systems
...
LLP64/IL32P64 16 32 32 64 64 Microsoft Windows (x86-64 and IA-64)
LP64/I32LP64 16 32 64 64 64 Most Unix and Unix-like systems, e.g. Solaris, Linux, BSD, and OS X; z/OS
...
O que isso significa hoje é que, para qualquer número inteiro "comum" (assinado), int
será suficiente e ainda poderá ser usado como o tipo inteiro padrão ao escrever o código do aplicativo C ++. Também - para propósitos práticos atuais - terá um tamanho consistente entre as plataformas.
Se um caso de uso requer pelo menos 64 bits, podemos usar hoje long long
, embora possivelmente use um dos tipos de especificação de testemunha ou o __int64
tipo possa fazer mais sentido.
Isso deixa long
no meio, e estamos considerando proibir completamente o uso de long
nosso código de aplicativo .
Isso faria sentido ou existe um caso para usar long
no código C ++ (ou C) moderno que precisa executar plataforma cruzada? (plataforma sendo desktop, dispositivos móveis, mas não itens como microcontroladores, DSPs etc.)
Links de fundo possivelmente interessantes:
- O que o padrão C ++ indica o tamanho do tipo int, long?
- Por que a equipe do Win64 escolheu o modelo LLP64?
- Modelos de programação de 64 bits: Por que LP64? (um pouco envelhecido)
- É
long
garantido que tenha pelo menos 32 bits? (Isso aborda a discussão de comentários abaixo. Resposta .)
long
é a única maneira de garantir 32 bits. int
pode ter 16 bits, portanto, para algumas aplicações, não é suficiente. Sim, int
às vezes são 16 bits em compiladores modernos. Sim, as pessoas escrevem software em microcontroladores. Eu diria mais pessoas escrever software que tem mais usuários em microcontroladores do que no PC com o surgimento de dispositivos iPhone e Android para não mencionar o surgimento de Arduinos etc.
int
ainda existem 16 bits. Detesto dizer isso, mas se você escrever sobre o "mundo entre plataformas de hoje", não poderá ignorar todo o subcontinente indiano.