"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-битное ограничение допустимо на некоторых старых платформах (это, вероятно, не имеет значения, и ваш код, вероятно, никогда не будет компилироваться), то это не имеет особого значения.

Другие вопросы по тегам