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 intwystarczy 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 __int64typ może mieć większy sens.
Pozostaje to longw środku i rozważamy całkowity zakaz korzystania longz naszego kodu aplikacji .
Czy miałoby to sens , czy jest uzasadnione użycie longnowoczesnego 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
longgwarantowane jest co najmniej 32 bity? (Dotyczy to dyskusji poniżej. Odpowiedź .)
longto jedyny sposób na zagwarantowanie 32 bitów. intmoże mieć 16 bitów, więc w niektórych aplikacjach to nie wystarczy. Tak, intczasami 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.
intwciąż 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.