У сучасному кросплатформенному світі C ++ (або C) ми маємо :
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
...
Сьогодні це означає, що будь-яке "загальне" (підписане) ціле число int
буде достатньо і, можливо, все ще може використовуватися як цілий тип за замовчуванням при написанні коду програми C ++. Він також буде - для сучасних практичних цілей - мати постійний розмір на різних платформах.
Якщо для випадку використання потрібні щонайменше 64 біти, ми можемо сьогодні використовувати long long
, хоча можливо, використовуючи один із типів біт -типу або __int64
тип може мати більше сенсу.
Це залишається long
в середині, і ми розглядаємо можливість прямо заборонити використання long
нашого коду програми .
Чи має це сенс , чи є випадок використання long
в сучасному коді C ++ (або C), який повинен запускати крос-платформу? (платформа - це настільні, мобільні пристрої, але не такі речі, як мікроконтролери, DSP тощо)
Можливо цікаві фонові посилання:
- Який стандарт C ++ визначає розмір int, довгий тип якого має бути?
- Чому команда Win64 обрала модель LLP64?
- 64-бітні моделі програмування: чому LP64? (кілька років)
- Є чи
long
гарантовано бути принаймні 32 біта? (Це стосується обговорення коментарів нижче. Відповідь .)
long
це єдиний спосіб гарантувати 32 біти. int
може бути 16 біт, тому для деяких застосувань цього недостатньо. Так, int
іноді буває 16 біт на сучасних компіляторах. Так, люди пишуть програмне забезпечення на мікроконтролери. Я б заперечував, що більше людей пише програмне забезпечення, яке має більше користувачів на мікроконтролерах, ніж на ПК із зростанням пристроїв iPhone і Android, не кажучи вже про підйом Arduinos тощо.
int
ще дуже багато 16 біт. Я ненавиджу це говорити, але якщо ти збираєшся писати про "сьогоднішній міжплатформенний світ", ти не можеш ігнорувати весь індійський субконтинент.