"Long" все еще полезен в C?
- Теперь это не самый большой целочисленный тип, так как есть "long long".
- Это не тип с фиксированной шириной: это 32 бита на некоторых платформах и 64 на других.
- Это не обязательно тот же размер, что и указатель (например, в 64-битной Windows)
Итак, "длинный" имеет какое-либо значение больше? Есть ли причина объявлять long вместо ptrdiff_t или int64_t?
2 ответа
Есть тонкая разница между still useful
а также something you should habitually use
, long
тип все еще процветает, как отметил Крис Латс за многими типами систем и платформ (хотя, как правило, без знака).
Когда вы знаете, что данные, с которыми вы будете работать, всегда будут соответствовать этому типу (согласитесь, лучше, если вы также знаете подпись), нет особой причины не использовать их, особенно если у вас ограниченное пространство в структуре, чтобы работать с.
Однако в большинстве случаев для будущих сопровождающих гораздо лучше использовать intxx_t или uintxx_t, где это возможно. Например, вы не знаете, что дата эпохи UNIX всегда будет соответствовать длинному без знака на 32-битных платформах (следовательно, time_t), если только вы не обладаете достаточными правами на то, что мир закончится до того, как перевернется:)
Есть ли причина объявлять long вместо ptrdiff_t или int64_t?
Там никогда не было в тех случаях. Если вам нужна разница указателей или конкретное 64-битное значение, вы должны использовать ptrdiff_t
или же int64_t
, Вы никогда не должны были использовать long
во-первых, за исключением, может быть, позади зависимой от платформы typedef
,
Вы должны использовать long
когда вам нужно хотя бы 32-разрядное целое число, потому что int
гарантированно будет не менее 16 бит. Если вам нужен нативный тип, но нужно как минимум 32-битный, используйте long
, Если 16-битное ограничение допустимо на некоторых старых платформах (это, вероятно, не имеет значения, и ваш код, вероятно, никогда не будет компилироваться), то это не имеет особого значения.