En multiplataforma C ++ de hoy (o C) mundo en el que tenemos :
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
...
Lo que esto significa hoy, es que para cualquier número entero "común" (con signo), int
será suficiente y posiblemente todavía se pueda usar como el tipo entero predeterminado al escribir código de aplicación C ++. También, para fines prácticos actuales , tendrá un tamaño constante en todas las plataformas.
Si un caso de uso requiere al menos 64 bits, hoy podemos usarlo long long
, aunque posiblemente use uno de los tipos que especifican bitness o el __int64
tipo podría tener más sentido.
Esto queda long
en el medio, y estamos considerando prohibir por completo el uso de long
nuestro código de aplicación .
¿Tendría sentido , o hay un caso para usar long
en código C ++ (o C) moderno que tiene que correr multiplataforma? (la plataforma es de escritorio, dispositivos móviles, pero no cosas como microcontroladores, DSP, etc.)
Posiblemente interesantes enlaces de fondo:
- ¿Qué indica el estándar C ++ del tamaño del tipo int, long?
- ¿Por qué el equipo Win64 eligió el modelo LLP64?
- Modelos de programación de 64 bits: ¿por qué LP64? (algo envejecido)
- ¿Se
long
garantiza que tenga al menos 32 bits? (Esto aborda la discusión de comentarios a continuación. Respuesta ).
long
es la única forma de garantizar 32 bits. int
puede ser de 16 bits, por lo que para algunas aplicaciones no es suficiente. Sí, a int
veces es de 16 bits en los compiladores modernos. Sí, la gente escribe software en microcontroladores. Yo diría que más personas escriben software que tiene más usuarios en microcontroladores que en el PC con el auge de los dispositivos iPhone y Android no mencionar el aumento de Arduino, etc.
int
todavía hay 16 bits. Odio decirlo, pero si vas a escribir sobre el "mundo multiplataforma de hoy", no puedes ignorar todo el subcontinente indio.