W dzisiejszym cross-platform C ++ (lub C) Świat możemy mieć :
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
...
Oznacza to dzisiaj, że dla każdej „wspólnej” (podpisanej) liczby całkowitej int
wystarczy i może być nadal używana jako domyślny typ liczby całkowitej podczas pisania kodu aplikacji C ++. Będzie również - dla obecnych praktycznych celów - mieć jednolity rozmiar na różnych platformach.
Jeśli przypadek użycia wymaga co najmniej 64 bitów, możemy dzisiaj użyć long long
, chociaż możliwe, że użyjemy jednego z typów określających bitowość lub __int64
typ może mieć większy sens.
Pozostaje to long
w środku i rozważamy całkowity zakaz korzystania long
z naszego kodu aplikacji .
Czy miałoby to sens , czy jest uzasadnione użycie long
nowoczesnego kodu C ++ (lub C), który musi działać na różnych platformach? (platforma to komputer stacjonarny, urządzenia mobilne, ale nie takie rzeczy jak mikrokontrolery, procesory DSP itp.)
Prawdopodobnie interesujące linki w tle:
- Jaki standard C ++ określa rozmiar int, długi typ?
- Dlaczego zespół Win64 wybrał model LLP64?
- 64-bitowe modele programowania: dlaczego LP64? (nieco w wieku)
- Czy
long
gwarantowane jest co najmniej 32 bity? (Dotyczy to dyskusji poniżej. Odpowiedź .)
long
to jedyny sposób na zagwarantowanie 32 bitów. int
może mieć 16 bitów, więc w niektórych aplikacjach to nie wystarczy. Tak, int
czasami jest 16 bitów w nowoczesnych kompilatorach. Tak, ludzie piszą oprogramowanie na mikrokontrolerach. Twierdziłbym, że więcej ludzi pisze oprogramowanie, które ma więcej użytkowników na mikrokontrolerach niż na PC, wraz z rozwojem urządzeń iPhone i Android, nie wspominając o rozwoju Arduinos itp.
int
wciąż jest bardzo 16 bitów. Nienawidzę tego mówić, ale jeśli zamierzasz pisać o „dzisiejszym wieloplatformowym świecie”, nie możesz zignorować całego subkontynentu indyjskiego.