В LP64 размер long
и размер long long
одинаковы (Apple Docs, Unix Docs).Лучше использовать длинный или длинный длинный в 64 бит
Есть ли какая-то разница, ограничивая себя пониманием того, что вы работаете на LP64-системе (как XCode появляется при компиляции для 64-битного), между long
и long long
? Есть ли причина в использовании для использования long
вместо long long
, если ваша цель - 64-битный интеграл?
Вот почему я спрашиваю. В Objective C на Xcode формат NSString (например, printf) и NSNumber используют типы данных, такие как int
, long
, long long
и их неподписанные варианты при преобразовании чисел и текстовых и нестандартных номеров бит, таких как int16_t
, int32
. и int64_t
. Это затруднит программирование вещей, требующих определенного минимального размера (т. Е. Сетевых или валютных приложений) или времени, когда вы хотите хранить данные определенного размера в NSNumber без приведения типов.
Безопасно, ограничив к любому устройству Intel Mac OS или IOS, чтобы использовать int
для int32_t
и long long
для int64_t
при взаимодействии с такими вещами как NSString-х функций форматирования и NSNumber?
Я собираюсь отметить это как правильно, потому что он ответил хотя бы на часть вопроса. Было бы неплохо узнать, есть ли разница между int и long в 32-битной системе или длинной и длинной в 64-битной системе. Чтобы добавить ответ, вы могли бы, конечно, поместить это в '#ifndef NDEBUG', чтобы он не получал никаких ресурсов при компиляции для выпуска. – Erroneous
@Erroneous - под ILP32 'int' и' long' являются 32-битными целыми числами, между ними нет практической разницы, точно такой же код будет скомпилирован для двух типов, они фактически являются просто псевдонимами друг друга. Аналогично для любых других целочисленных типов, которые имеют одинаковый размер. HTH – CRD
Почему вы выполняете двойную '()' -верку ваших проверок, когда сам макрос 'BUILD_BUG_ON()' '()' -wraps условие _ (такой, что он препроцессор в '... ((sizeof (int) ! = 4)) ... ') _? Есть ли особая причина для этого? Или это просто плохая привычка, которую вы выбрали из использования макросов, которые плохо написаны и не '()' -wrap их аргументы? –