В современном кроссплатформенном мире 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, long?
- Почему команда Win64 выбрала модель LLP64?
- 64-битные модели программирования: почему LP64? (несколько лет)
- Является ли
long
гарантированно быть по крайней мере 32 бита? (Это касается обсуждения комментариев ниже. Ответ .)
long
это единственный способ гарантировать 32 бита. int
может быть 16 бит, поэтому для некоторых приложений этого недостаточно. Да, int
иногда это 16 бит на современных компиляторах. Да, люди пишут программы на микроконтроллерах. Я бы сказал, что все больше людей пишут программное обеспечение, которое имеет больше пользователей на микроконтроллерах, чем на ПК, с ростом устройств iPhone и Android, не говоря уже о росте Arduinos и т. Д.
int
еще очень много 16 бит. Ненавижу это говорить, но если вы собираетесь писать о «современном кроссплатформенном мире», вы не можете игнорировать весь индийский субконтинент.